2013-02-18 80 views
0

我想用C#從下面的XML文件中讀取一段。從XML文件中提取特定節點

<?xml version="1.0" encoding="utf-8" > 
<DataSet> 
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
<xs:complexType> 
<xs:choice minOccurs="0" maxOccurs="unbounded"> 
<xs:element name="Table"> 
<xs:complexType> 
<xs:sequence> 
    <xs:element name="Column1" type="xs:string" minOccurs="0" /> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    </xs:choice> 
    </xs:complexType> 
    </xs:element> 
    </xs:schema> 
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
<NewDataSet> 
<Table diffgr:id="Table1" msdata:rowOrder="0"> 
    <Column1><Properties><Property>..... 

我想提取Column1節點下的節點。 Properties節點有很多Property節點,所以我想要Properties節點和所有Property節點。

請讓我知道在C#中獲取節點的最簡單有效的方法。

+0

你嘗試過什麼。你卡在哪裏? Linq-to-XML可能是最簡單的 – sehe 2013-02-18 08:43:35

+0

我嘗試使用XMLNodelist,然後循環xml節點,但我想最簡單高效的...可以給你一個樣本,如何在linq中完成xml? – Varun 2013-02-18 08:46:20

+0

通常,您應該顯示您現在使用的代碼的要點,以便人們可以適應這一點。 – sehe 2013-02-18 08:54:40

回答

0

您可以使用LINQ到XML類來解析字符串,然後XPath表達式來選擇所需的節點:

XElement doc = XElement.Parse(s); //where s is a string containing the XML 
var properties = doc.XPathSelectElements("//Column1/Properties"); 

現在properties包含所需的節點的枚舉。

如果你想通過所有的屬性節點,你可以這樣做這樣的迭代:

foreach(var pp in properties) 
{ 
    foreach(var p in pp.Elements("Property")) 
    { 
     //do something 
    } 
} 
+0

如何將屬性轉換爲XElement以加載XMLDocument對象?我有一個返回XMLDocument的函數,因爲我已經得到了我想要的屬性對象,我只想將它轉換爲xlement.outerxml.ToString()並從它加載xmldocumnet對象,如docXML.LoadXml(xelementvariable.OuterXml。的ToString());並返回值 – Varun 2013-02-18 11:07:49

+0

我自己修復它。 – Varun 2013-02-27 10:02:41