我在查找適當的XPATH語法時遇到問題,無法使用此XML文件獲取我想要的節點。首先,XML中沒有NameSPace,所以我必須在代碼中添加一個。我認爲這會影響我的XPATH。XPATH Help:使用XPathNodeIterator在命名空間中查找XML節點
我有一個看起來像這樣的XML文件:
<configuration xmlns="http://schemas.microsoft.com/support/2003/02/config">
<name>Content</name>
<description>Desc</description>
<lastModifiedBy>Me</lastModifiedBy>
<lastModifiedDate>2011-04-18T14:05:00</lastModifiedDate>
<section name="MaintenanceNotices">
<key name="MaintenanceNote1" value="The Title Value" />
<link id="1234" type="5" href="" target="_self" name="MaintenanceNote1a">
<description>Description</description>
</link>
</section>
</configuration>
所以,對於XPATH,如果我想在「配置」元素,以獲得「名」節點值,我想我會用這個XPATH:
/configuration/name
但有時我需要追加NS:它:
/ns:configuration/ns:name
,然後我可以找到電子像這樣的lement值:
while (xmlNodeIterator.MoveNext()) {
result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
}
但是這根本不適用於我。它不會在XML中找到任何值,無論我嘗試什麼xpath。這裏是我的代碼:
private string GetXML()
{
string result = string.Empty;
string fileName = "Content.xml";
string filePath = "C:\\Content\\{0}";
XPathDocument xdoc = new XPathDocument(string.Format(filePath, fileName));
var nav = xdoc.CreateNavigator();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/taxonomy/2003/1");
nsmgr.AddNamespace("gds", "http://support.microsoft.com/common/schemas/gdsPage/1/");
string sectionName = "MaintenanceNotices";
string xpath = "/configuration";
// section[name={0}]"; ///key[name=MaintenanceNote1]/";
XPathNodeIterator xmlNodeIterator = nav.Select(string.Format(xpath, sectionName), nsmgr);
while (xmlNodeIterator.MoveNext())
{
result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
}
return result;
}
你能看到任何問題,或提供我的Xpath語法的建議嗎?
謝謝。
的[根據需要在C#中的XPath不工作]可能重複(http://stackoverflow.com/questions/2576024/xpath-doesnt-work-as -desired-in-c) – 2011-03-23 19:36:46