0

我有以下 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
}
4

2 回答 2

0

你想要这样的东西:

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

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

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

于 2012-09-13T10:17:14.097 回答
0

哟可以替换为

var xe = f.Root.Elements("Data/ElementDefinition/QUANTITY").Where(x => x.Value != "0").ToArray();
于 2012-09-13T10:17:52.823 回答