2010-11-30 12 views
1

在我的xml中使用命名空間(我需要使用它來進行xsd驗證)。因爲這個,我的xpath不再工作。如何在c#中設置命名空間URI?

我的代碼:

XmlDocument doc = new XmlDocument(); 
doc.Load(newXmlFilePath); 

和XML:

<?xml version="1.0" encoding="UTF-8"?> 
<video xmlns="UploadXSD"> 
    <title> 
    A vid with Pete 
    </title> 
    <description> 
    Petes vid 
    </description> 
    <contributor> 
    Pete 
    </contributor> 
    <subject> 
    Cat 2 
    </subject> 
</video> 

但我的XPath犯規選擇的節點。我試圖設置命名空間使用:

doc.NamespaceUR = "x"; 

然而,它是一個只獲得訪問者。有任何想法嗎?

+0

已經在你的其他問題的答案http://stackoverflow.com/questions/4312103/why-doesnt-this-xpath-c-work – 2010-11-30 09:51:39

+0

我們關閉了兩者中的哪一個? – 2010-11-30 15:12:11

回答

2
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable); 
nsMgr.AddNamespace("vid", "UploadXSD"); 

請注意,您需要使用您的查詢使用。例如:

doc.SelectSingleNode("/vid:video/vid:subject", nsMgr); 

由於否則SelectSingleNode不知道該經理的環境中操作。

0

根據你最近的其他問題,我認爲你正試圖處理一些文件混合,其中一些在特定的命名空間,而另一些則不在 - 所以你希望是名稱空間不可知的,對嗎?

有幾件事情你可以做。你可以使用hack to strip out the namespace - 但這一直讓我感到有點脆弱。還有其他方式來表達語義上相同的文檔 - 例如整個事情可能會在每個元素上使用一個名稱空間前綴 - 而這個技巧將無法工作。

或者你可以編寫名稱空間不可知的XPath查詢。例如。 "/*[local-name()='video']/*[local-name()='subject']"