XSL读取处理指令,其中包含空格

时间:2013-04-07 08:25:23

标签: xslt xpath xslt-2.0

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

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

如果我尝试使用处理指令('Tag To Delete'),我会收到错误 - 没有处理指令会被命名为“Tag To Delete”。无效的QName {标记为删除}

请帮忙。

2 个答案:

答案 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 ?>