2009-09-17 34 views
0

我已經寫了一個XML解析塊,它工作成功,提供了一個絕對路徑。從C#中查詢特定節點的XML

我現在需要把一個XMLNode作爲參數,並對此運行一個xpath。

有誰知道如何做到這一點?

我嘗試使用相對XPath查詢沒有任何成功!

這是否應該這麼難?

+1

很難幫助解決這樣一個通用的問題;你可以發佈一個示例xml文件和xpath你想要工作嗎? – 2009-09-18 00:18:00

回答

2

這將有助於查看XPath表達式的示例,這些示例並不像您認爲的那樣工作。以下是一些可能的原因(我經常犯的錯誤)。

假設XML文檔,例如:

<A> 
    <B> 
    <C d='e'/> 
    </B> 
    <C/> 
    <D xmlns="http://foo"/> 
</A> 
  • 忘記除去頂層斜線( '/')表示該文檔:

    document.XPathSelectElements("/A") //選擇單個的節點

    document.XPathSelectElements("//B") //選擇單個B節點

    document.XPathSelectElements("//C") //選擇兩個C節點

aNode.XPathSelectElements("/B") // selects nothing (this looks for a rootNode with name B) 
aNode.XPathSelectElements("B") // selects a B node 

bNode.XPathSelectElements("//C") // selects TWO C nodes - all descendants of the root node 
bNode.select(".//C") // selects one C node - all descendants of B 
  • 遺忘命名空間。

    aNode.XPathSelectElements("D") //選擇什麼(d是在從A不同的命名空間) aNode.XPathSelectElements("[local-name()='D' and namespace-uri()='http://foo']") //一個d節點

(這是經常當根節點攜帶prefixless命名空間的問題 - 易於錯過)