C#Linq XML,检查特定值并解析为数组

时间:2012-09-13 10:13:22

标签: c# xml 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>

我需要创建一个包含所有ElementDefinitions的数组,其中包含QUANTITY元素,其值不是0。

我试过了:

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
}

2 个答案:

答案 0 :(得分:0)

你想要这样的东西:

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

如果您想要ID,选择所有QUANTITY节点并不是很有帮助。相反,请准确选择您在问题中指定的内容:

所有ElementDefinitions(Descendants("ElementDefinition")),其QUANTITY的值不是0(Where(x => x.Element("QUANTITY").Value != "0")。从结果节点中,选择ID(Select(x => x.Element("ID").Value))。

答案 1 :(得分:0)

哟可以替换为

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