如何编写一个xpath来选择一个文本包含特殊字符的节点,例如'哪种无效的inxpath?
<Nodes><Node><Text>General Marketing'</Text><Nodes><Node><Text>Brochures</Text></Node><Node><Text>Value-Added</Text><Nodes><Node><Text>About Henderson</Text></Node><Node><Text>Own the World</Text></Node></Nodes></Node></Nodes></Node></Nodes>
和
var branchName = "General Marketing'";
var xPath = String.Format("/Nodes/Node[Text = '{0}']", branchName);
上述xpath失败,因为xPath包含以下文本:
/Nodes/Node[Text = 'General Marketing'']
如你所见,有2个奸犯。
到目前为止我的测试只有'问题'。不确定是否还有其他可能有问题的特殊字符?
所以我想我需要将我的xpath修改为其他内容。
我尝试了以下但没有奏效:
var xPath = String.Format("/Nodes/Node[Text = \"{0}\"]", branchName);
希望问题很明确。
谢谢,
答案 0 :(得分:3)
使用强>:
//Text[.="General Marketing'"]
如果在XSLT中使用此XPath表达式,则整个XPath表达式myst将被撇号包围,并且必须使用内置实体'
转义由引号括起的字符串的最后一个字符(撇号):< / p>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select='//Text[.="General Marketing'"]'/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<Nodes>
<Node>
<Text>General Marketing'</Text>
<Nodes>
<Node>
<Text>Brochures</Text>
</Node>
<Node>
<Text>Value-Added</Text>
<Nodes>
<Node>
<Text>About Henderson</Text>
</Node>
<Node>
<Text>Own the World</Text>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
</Nodes>
选择了想要的元素并将其复制到输出:
<Text>General Marketing'</Text>
这比其他方法更简单,例如:
//Text[. = concat('General Marketing', $vQ)]
其中变量$vQ
定义为:
<xsl:variable name="vQ">'</xsl:variable>