首页 文章

XSLT使用&lt和>解析XML

提问于
浏览
1

我有一个XML文档,其中包含一个包含以下samplecode的TextBlock .

<TextBlock>
  <config>This is a config.</config>
  <path>This is a file path.</path>
</TextBlock>

实际的XML文件包含以下内容

&lt;TextBlock&gt;
  &lt;config&gt;This is a config.&lt;/config&gt;
  &lt;path&gt;This is a file path.&lt;/path&gt;
&lt;/TextBlock&gt;

我正在尝试使用XSLT 1.0获取路径标记的值

<h1>
  <xsl:value-of select="/TextBlock/path" disable-output-escaping="yes"/>
</h1>

我没有得到这个值,因为XML结构由于&lt; gt而被破坏了 .
有没有办法解决这个问题,或者在XSLT中将 &lt&gt 转换为 <>

2 回答

  • 0

    转义的XML只是一个无意义的文本字符串,无法使用XPath进行解析 .

    在给定的示例中,您可以使用:

    <xsl:value-of select="substring-before(substring-after(/TextBlock, '&lt;path&gt;'), '&lt;/path&gt;')"/>
    

    从给定文档中提取字符串 "This is a file path." .


    或者,您可以处理文档两次:在第一遍中,使用 disable-output-escaping 来取消对字符串的转换,然后在生成的文件中使用第二个样式表来提取现在将是 path 元素的内容 .


    补充:

    如果整个文档如您编辑的示例中所示进行转义,则它不是XML文档,并且根本不能由XSLT(至少不是XSLT 1.0)处理 .

  • 1

    如果您有sed可用,则可以在使用XSLT处理文件之前将文件通过它 .

    例如:要处理 input.xmloutput.xml ,您将执行

    sed -e "s/&lt;/</g" input.xml | sed -e "s/&gt;/>/g" > output.xml
    

    然后使用您选择的XSLT处理器处理 output.xml .
    这会将所有 &lt;&gt; 实体转换为相应的字符 .

相关问题