XSLT 使用 < 和 > 解析 XML



我有一个XML文档,其中包含一个包含以下示例代码的文本块。

<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 结构由于 <> 而损坏。
有没有办法解决这个问题或在 XSLT 中将&lt&gt转换为<>

义的 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)处理。

如果有可用的sed,则可以在使用 XSLT 处理文件之前通过管道传输文件。

例如:将input.xml处理到您将执行output.xml

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

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

相关内容

  • 没有找到相关文章

最新更新