2012-09-11 63 views
2

我有一個簡單的xml,我創建了一個XmlDocument,並使用Xpath來獲取節點,我需要將此節點傳遞給代碼的其他部分,我可以使用其他xpath函數在XmlNode對象上獲取其他子節點。但在下面XmlNode上的SelectSingleNode方法返回未定義的值

string xmlString = "<catalog><music><cds><cd><title>First Title</title><author>Author 1</author></cd><cd><title>Second Title</title><author>Author 2</author></cd></cds></music></catalog>"; 
XmlDocument xmlDocument = new XmlDocument(); 
xmlDocument.LoadXml(xmlString); 
XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music"); 
XmlNode cdsNode = musicNode.SelectSingleNode("/cds"); 
當我打印的musicNode名

的代碼,我得到「音樂」,所以我認爲我有「音樂」節點。所以,我再次在音樂節點上應用XPath表達式「/ CDS」假設我會得到「CDS」的XmlNode,但cdsNode的代碼返回未定義的值,但如果我不

XmlNode cdsNode = musicNode.SelectSingleNode("/catalog/music"); 

我得到一個有效的值對於再次是「音樂」節點的cdsNode,我想musicNode代表XmlDocument而不是「音樂」XmlNode ???我是否錯過了某些東西,我是從Java和Java導航到節點的子節點,可能使用xpath,就像xpath表達式中的「/ cds」一樣,musicNode會返回一個有效的cdNode

回答

2

/將始終返回到無論當前節點如何,其基礎XmlDocument的根。

/和導航的相對路徑,你應該是好的,即

XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music"); 
XmlNode cdsNode = musicNode.SelectSingleNode("cds"); 

,或者步行整個路徑再次

XmlNode cdsNode = xmlDocument.SelectSingleNode("/catalog/music/cds");