我有一个XML文档,其中包含一个包含以下示例代码的文本块。
<TextBlock>
<config>This is a config.</config>
<path>This is a file path.</path>
</TextBlock>
实际的 XML 文件包含以下内容
<TextBlock>
<config>This is a config.</config>
<path>This is a file path.</path>
</TextBlock>
我正在尝试使用 XSLT 1.0 获取路径标记的值
<h1>
<xsl:value-of select="/TextBlock/path" disable-output-escaping="yes"/>
</h1>
我没有得到这个值,因为 XML 结构由于 <> 而损坏。
有没有办法解决这个问题或在 XSLT 中将<
和>
转换为<
和>
?
义的 XML 只是一个无意义的文本字符串,无法使用 XPath 进行分析。
在给定的示例中,您可以使用:
<xsl:value-of select="substring-before(substring-after(/TextBlock, '<path>'), '</path>')"/>
从给定文档中提取字符串"This is a file path."
。
或者,您可以处理文档两次:在第一次传递中,使用 disable-output-escaping
取消转义字符串,然后在生成的文件上使用第二个样式表来提取现在将成为 path
元素的内容。
添加:
如果整个文档如编辑的示例所示进行转义,则它不是 XML 文档,根本无法由 XSLT(至少不是 XSLT 1.0)处理。
如果有可用的sed
,则可以在使用 XSLT 处理文件之前通过管道传输文件。
例如:将input.xml
处理到您将执行output.xml
sed -e "s/</</g" input.xml | sed -e "s/>/>/g" > output.xml
然后使用您选择的 XSLT 处理器处理output.xml
。
这会将所有<
和>
实体转换为相应的字符。