2012-01-20 27 views
2

如何编写一个xpath来选择一个节点,其文本中包含特殊字符,例如'哪一种是无效的inxpath?如何编写xpath以选择其文本包含特殊字符(如apostorophe)的节点?

<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个apostorophes。

从我的测试到目前为止,它只有问题'。不确定是否有任何其他可能有问题的特殊字符?

所以我想我需要修改我的xpath是别的东西。

我试过以下,但没有奏效:

var xPath = String.Format("/Nodes/Node[Text = \"{0}\"]", branchName); 

希望这个问题是清楚的。

谢谢,

回答

2

使用

//Text[.="General Marketing'"] 

如果该XPath表达式中XSLT使用,那么整个XPath表达式神秘岛被包围国税发串撇号和最后一个字符(撇号)所包围通过引号必须使用内置实体逃脱:&apos;

<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&apos;"]'/> 
</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是d定义为:

<xsl:variable name="vQ">'</xsl:variable> 
相关问题