2012-09-13 50 views
0

我有下面的XML:C#的LINQ XML,檢查特定值並解析到陣列

<?xml version="1.0" ?> 
<NewDataSet> 
    <Data> 
    <ElementDefinition> 
     <ID>1</ID> 
     <QUANTITY>0</QUANTITY> 
    </ElementDefinition> 
    <ElementDefinition> 
     <ID>2</ID> 
     <QUANTITY>1</QUANTITY> 
    </ElementDefinition> 
    </Data> 
</NewDataSet> 

我需要創建一個包含含有一定量的元件與其他然後0值的所有ElementDefinitions陣列。

我想:

var f = XDocument.Load(path); 
var xe = f.Root.Elements("QUANTITY").Where(x => x.Value != "0").ToArray(); 

但這似乎並沒有工作。使用上面的XML數組應該包含1個項目,但它保持爲0.

之後,我需要爲數組中的每個ElementDefinition創建一個字符串,該字符串必須包含相應的ID元素的值。

對於我試過:

foreach (string x in xe) 
{ 
    string ID = //not sure what to do here 
} 

回答

0

你想是這樣的:

var ids = f.Root.Descendants("ElementDefinition") 
      .Where(x => x.Element("QUANTITY").Value != "0") 
      .Select(x => x.Element("ID").Value); 

正如你想要的ID,它是不是非常有幫助選擇所有量節點。相反,請正確選擇您在問題中指定的內容:

所有ElementDefinitions(Descendants("ElementDefinition")),其數值不爲0的數量(Where(x => x.Element("QUANTITY").Value != "0")。從生成的節點中,選擇ID(Select(x => x.Element("ID").Value))。

+0

感謝您的快速解答更換!它似乎現在起作用。一個'noob'問題..:如何將每個ID寫入一個字符串(將是一個XML WriteString函數)?我需要使用foreach嗎? – Felix

+0

您已經在'ids'變量中將所有ID都作爲字符串。你還需要什麼? –

+0

我需要將每個單獨的ID轉換爲單獨的字符串。但是,如果我現在正確地理解了它的一個字符串數組。所以我可以使用'foreach(id in id)'? – Felix

0

呦可以

var xe = f.Root.Elements("Data/ElementDefinition/QUANTITY").Where(x => x.Value != "0").ToArray();