2011-10-23 101 views
4

我試圖使用其中一個屬性包含撇號的SelectNodes包含屬性撇號

文本的SelectNodes屬性是OOR:路徑和節點如下:

<item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"> 

我有嘗試使用此代碼(並失敗)...

XmlNodeList xnList = xml.SelectNodes("/oor:items/item[contains(@oor:path, '[&apos;PickList&apos;]/OrderList')]", nsMgr); 

請幫忙!

//安德斯

回答

0

&apos;實體分解成單引號XPath解析器之前可以看到它們。因此,從它的角度來看,它們不能與「真實」的單引號區分開來。

可以劃定參數與逃脫雙引號,並在表達式中使用單引號:

XmlNodeList xnList = xml.SelectNodes(
    "/oor:items/item[contains(@oor:path, \"['PickList']/OrderList\")]", nsMgr); 

,或者,使用逐字字符串:

XmlNodeList xnList = xml.SelectNodes(
    @"/oor:items/item[contains(@oor:path, ""['PickList']/OrderList"")]", nsMgr); 
+0

謝謝你真是太棒了! – Andis59

0

你可以使用

//item[contains(@oor:path, &quot;['PickList']/OrderList&quot;)] 

XSLT - 基於驗證

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:oor="hmm: oor"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "//item[contains(@oor:path, &quot;['PickList']/OrderList&quot;)] 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉變是在下面的XML文檔施加:

<item xmlns:oor="hmm: oor" 
oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"/> 

的想要的,正確地選擇節點被複制到輸出

<item xmlns:oor="hmm: oor" oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"/>