使用通配符的XDocument后代选择器?

时间:2018-10-25 08:51:51

标签: c# xml

我有一些这样的XML结构:

<form>
    <section-1>
        <item-1>
            <value />
        </item-1>
        <item-2>
            <value />
        </item-2>
    </section-1>
    <section-2>
        <item-3>
            <value />
        </item-3>
        <item-4>
            <value />
        </item-4>
    </section-2>
</form>

...并希望将其变成这样的健全:

<form>
    <items>
        <item id="1">
            <value/>
        </item>
        <item id="2">
            <value/>
        </item>
        <item id="3">
            <value/>
        </item>
        <item id="4">
            <value/>
        </item>
    </items>
</form>

我正在努力将旧的XML转换为值的数组或对象。一旦采用新格式,我就可以执行以下操作:

XDocument foo = XDocument.Load(form.xml);
var items = foo.Descendants("item")
    .Select(i => new Item
    {
        value = i.Element("value").Value
    });

...但是在当前混乱中,xml是否可以通配后代选择器?

var items = foo.Descendants("item"*)

...还是什么?我尝试遵循this question's answer,但未能使其适应我的目的。

1 个答案:

答案 0 :(得分:1)

啊哈!最后确实点击了。如果我将后代选择器留空,并按照this question's answer

中的内容添加where语句
.Where(d => d.Name.ToString().StartsWith("item-"))

然后我们得到:

XDocument foo = XDocument.Load(form.xml);
var items = foo.Descendants()
    .Where(d => d.Name.ToString().StartsWith("item-"))
    .Select(i => new Item
    {
        value = i.Element("value").Value
    });

...并且我现在能够在输出新的XML格式时遍历这些值。幸福。