2012-01-20 60 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> 
相關問題