我有一个XML文档,其中包含一个包含以下示例代码的TextBlock。
<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>
由于&amp; lt&amp; gt而导致XML结构中断,因此我无法获得该值。
有没有办法解决这个问题,或者在XSLT中将<
和>
转换为<
和>
?
答案 0 :(得分:1)
Escaped XML只是一个无意义的文本字符串,无法使用XPath进行解析。
在给定的示例中,您可以使用:
<xsl:value-of select="substring-before(substring-after(/TextBlock, '<path>'), '</path>')"/>
从给定文档中提取字符串"This is a file path."
。
或者,您可以处理文档两次:在第一遍中,使用disable-output-escaping
取消对字符串的转换,然后在生成的文件中使用第二个样式表来提取现在的内容{{1元素。
如果您的整个文档已如您编辑的示例中所示进行转义,则它不是XML文档,并且XSLT(至少不是XSLT 1.0)根本无法处理。< / p>
答案 1 :(得分:0)
如果您有sed
可用,则可以在使用XSLT处理文件之前通过它传输文件。
例如:要处理input.xml
到output.xml
,您将执行
sed -e "s/</</g" input.xml | sed -e "s/>/>/g" > output.xml
然后使用您选择的XSLT处理器处理output.xml
这会将所有<
和>
实体转换为相应的字符。