0

在源 xml 文档中,我有一个包含空格的处理指令 - <?Tag To Delete?>

如何使用 xslt 读取和处理此处理指令?

如果我尝试使用 processing-instruction('Tag To Delete') 我会收到一个错误 - 任何处理指令都不会被命名为 'Tag To Delete'。无效的 QName {标记要删除}

请帮忙。

4

2 回答 2

3

不完全清楚一旦你选择了这条处理指令你想做什么,但处理指令的名称是从<?第一个空格到第一个空格的部分(所以在这种情况下,名称是Tag)。第一个空格之后的部分是它的内容。因此,与该处理指令匹配的 XPath 是:

processing-instruction('Tag')[. = 'To Delete']
于 2013-04-07T08:51:35.620 回答
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 ?>
于 2013-04-07T16:24:22.503 回答