代码之家  ›  专栏  ›  技术社区  ›  Thiyagaraj

是否可以根据XML处理指令在源文档中的存在来包含/排除它?

  •  0
  • Thiyagaraj  · 技术社区  · 15 年前

    我必须从不同的源返回信息,并且可以在两者之间进行转换,但是取决于源文档是否有XML处理指令,我必须传递它,如果没有,我不应该传递它。

    Input
    <?xml version="1.0" encoding="UTF-8"?>
    <Source/>
    
    Output    
    <?xml version="1.0" encoding="UTF-8"?>
    <Source/>
    

    如果它没有处理指令,我不应该把它包括在输出中,主要是为了支持一些不理解它们的遗留程序(duh!)

    我可以动态地切换样式表,并根据输入是否有指令使用omit-xml声明,但是在单个样式表中是否可以这样做?

    编辑:在返回数据之前,我无法删除存在的转换。

    编辑:我刚读到,尽管它看起来像一个处理指令, <?xml version.. ?> ,实际上不是,所以不确定是否可以匹配,有什么建议吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Tomalak    15 年前

    XML声明看起来像一条处理指令,但实际上不是。

    它的存在是为了通知XML解析器它将要读取的文档(XML版本、字符编码)。

    它不存在于生成的dom/infoset中,因此无法在xslt中匹配。

    此外,不能动态更改 <xsl:output> 指令,类似于 <xsl:if> <xsl:choose> 构造无法工作。

    我的建议是:如果下游应用程序的一部分不理解XML声明(这是 世界跆拳道联盟 事实上,这真的让我抓伤了我的头),然后用以下的方法让它们一直离开:

    <xsl:output omit-xml-declaration="yes" />
    
    推荐文章