在源 xml 文档中,我有一个包含空格的处理指令 -
<?Tag To Delete?>
如何使用 xslt 读取和处理此处理指令?
如果我尝试使用 processing-instruction('Tag To Delete') 我会收到一个错误 - 任何处理指令都不会被命名为 'Tag To Delete'。无效的 QName {标记要删除}
请帮忙。
不完全清楚一旦你选择了这条处理指令你想做什么,但处理指令的名称是从<?
第一个空格到第一个空格的部分(所以在这种情况下,名称是Tag
)。第一个空格之后的部分是它的内容。因此,与该处理指令匹配的 XPath 是:
processing-instruction('Tag')[. = 'To Delete']
如果处理指令的字符串值中可能存在不确定数量的空格字符,例如:
<?Tag To Delete?>
<?Tag To Delete ?>
<?Tag To Delete ?>
这些变体中的任何一个都可以通过以下方式选择:
processing-instruction('Tag')[normalize-space() = 'To Delete']
下面是一个简短的、基于 XSLT 的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/processing-instruction('Tag')[normalize-space() = 'To Delete']"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下 XML 文档时:
<t>
<?Tag To Delete?>
<?Tag Not To Delete ?>
<?Tag To Delete ?>
<?Tag To Delete ?>
</t>
对 XPath 表达式求值,并将该求值的结果(选定节点)复制到输出:
<?Tag To Delete?><?Tag To Delete ?><?Tag To Delete ?>