如何使用Linq在XML上返回空节点的默认值

时间:2014-10-31 00:15:29

标签: xml linq

我有以下XML结构:

<Root>
<Item ItemId="abc" ItemType="cde">
        <Item2 ItemId="abc">
          <Value>MyValue1</Val>
        </Item2>
</Item>
<Item ItemId="abc" ItemType="cde">
        <Item2 ItemId="abc">
          <Value>MyValue1</Val>
          <Item3 ItemId="abc">
            <Value>MyValue2</Val>
          </Item3>
        </Item2>
</Item>

我想要做的是基本上检索该XML的信息(XML实际上更大,但它只包含那些类型的节点)。确切地说,我感兴趣的是从名为Value的节点中检索信息,但我想要做的是。

  • 如果“Item”节点包含两个“Value”节点,则检索其中两个节点。
  • 如果“Item”节点只包含一个“Value”节点,则检索它并为第二个节点分配一个默认值“empty”。

如果我这样做:

var topValue = xDoc.Descendants("Item2").Elements("Val").Select(val => val.Value).ToArray();
var nestedValue = xDoc.Descendants("Item3").Elements("Val").Select(val => val.Value ).ToArray();

然后,topValue的结果将有2个值,而nestedValue的结果将有1个值。我也想为nestedValue设置2个值(例如:{“empty”,“MyValue2”})所以一旦我遍历它们,它们就会匹配,Item2下的Value输出和Item3下的Value同步。

所需的输出如下:

topValue = {“MyValue1”,“MyValue1”} nestedValue = {“empty”,“MyValue2”}

或者有一种更好的方法可以使用Linq只用一个Linq查询来实现它?

知道该怎么做吗?

非常感谢提前。 Ĵ

0 个答案:

没有答案