在源xml文档中,我有一个包含空格的处理指令 -
<?Tag To Delete?>
如何使用xslt读取和处理此处理指令?
如果我尝试使用处理指令('Tag To Delete'),我会收到错误 - 没有处理指令会被命名为“Tag To Delete”。无效的QName {标记为删除}
请帮忙。
答案 0 :(得分:3)
一旦你选择了这个处理指令,你不清楚你想要做什么,但处理指令的名称是<?
到第一个空间的部分(所以在这种情况下,名称是Tag
)。第一个空格之后的部分是其内容。因此,与该处理指令匹配的XPath是:
processing-instruction('Tag')[. = 'To Delete']
答案 1 :(得分:0)
如果处理指令的字符串值中可能存在未确定的空格字符数,例如:
<?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 ?>