如何在具有连续属性值的两个相同节点之间获取内容(或执行某种检查)。以下面的示例xml文件
<items>
<item id="0001" type="donut">
<name>Cake</name>
<ppu>0.55</ppu>
<batters>
<batter id="1001">Regular</batter> is good <ax>1023</ax> and <batter id="1002">Chocolate</batter> or maybe <batter id="1003">Blueberry</batter>
</batters>
<topping id="5001">None</topping>
<topping id="5002">Glazed</topping>
<topping id="5005">Sugar</topping>
<topping id="5006">Sprinkles</topping>
<topping id="5003">Chocolate</topping>
<topping id="5004">Maple</topping>
</item>
...
</items>
如何使用linq-to-xml获取节点<batter id="...">
与下一个<batter id="...">
之间的内容,即is good <ax>1023</ax> and
和or maybe
?
答案 0 :(得分:1)
假设您只想获取所有子节点但按条件忽略节点(元素名称为&#34; batter&#34;在您的情况下),则所有子节点上的基本Where
条件将执行:
string s = @"<items>
<item id='0001' type='donut'>
<name>Cake</name>
<ppu>0.55</ppu>
<batters>
<batter id='1001'>Regular</batter> is good <ax>1023</ax> and <batter id='1002'>Chocolate</batter> or maybe <batter id='1003'>Blueberry</batter>
</batters>
<topping id='5001'>None</topping>
<topping id='5002'>Glazed</topping>
<topping id='5005'>Sugar</topping>
<topping id='5006'>Sprinkles</topping>
<topping id='5003'>Chocolate</topping>
<topping id='5004'>Maple</topping>
</item>
</items>";
var yourNodes = XDocument.Parse(s)
.Descendants("batters").Nodes()
.Where(a=>
a.NodeType == XmlNodeType.Text || // take all text nodes
// or elements that are not "batter".
(a.NodeType == XmlNodeType.Element && ((XElement)a).Name
!= "batter"));
string concatenated = yourNodes.Select(a=>a.ToString()).Aggregate((a,b)=>a+b);