我有一些这样的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,但未能使其适应我的目的。
答案 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格式时遍历这些值。幸福。