.net 使用linq2xml对xml文件进行排序
以下问题 成功筛选后,从xml文件中删除节点。我想按节点中的某些属性进行排序 xml文件示例:.net 使用linq2xml对xml文件进行排序,.net,xpath,linq-to-xml,.net,Xpath,Linq To Xml,以下问题 成功筛选后,从xml文件中删除节点。我想按节点中的某些属性进行排序 xml文件示例: <Root> <Group Price="50"> <Item Price="60"/> <Item Price="50"/> <Item Price="70"/> </Group> <Group Price="55"> <I
<Root>
<Group Price="50">
<Item Price="60"/>
<Item Price="50"/>
<Item Price="70"/>
</Group>
<Group Price="55">
<Item Price="62"/>
<Item Price="57"/>
<Item Price="55"/>
</Group>
<Group Price="61">
<Item Price="62"/>
<Item Price="61"/>
<Item Price="65"/>
</Group>
<!--More Group Nodes-->
</Root>
我想得到:
<Root>
<Group Price="61">
<Item Price="65"/>
<Item Price="62"/>
<Item Price="61"/>
</Group>
<Group Price="55">
<Item Price="62"/>
<Item Price="57"/>
<Item Price="55"/>
</Group>
<Group Price="50">
<Item Price="70"/>
<Item Price="60"/>
<Item Price="50"/>
</Group>
<!--More Group Nodes-->
</Root>
我当前的代码是混合LINQ2Xml和XPATH:
'First I remove Group nodes with prices higher than 60 (and their sons).
dim filter as String="./Root/Group[not(translate(@Price, ',.', '.')<=60})]"
elements = doc.XPathSelectElements(filter).OrderByDescending((Function(x) CType(x.Attribute("Price"), Decimal)))
'Remove elements what don't fullfill the condition (prices higher than 60)
elements.Remove()
'After I remove Item nodes with prices higher than 60
filter as String="./Root/Group/Item[not(translate(@Price, ',.', '.')<=60})]"
elements = doc.XPathSelectElements(filter).OrderByDescending((Function(x) CType(x.Attribute("Price"), Decimal)))
'Remove elements what don't fullfill the condition (prices higher than 60)
elements.Remove()
正如我之前所说,我成功地进行了筛选,但在这种情况下,我无法按降序排列。
是否有任何方法可以在一个步骤中对组节点和项目节点进行排序,或者我必须在两个步骤中进行排序
有人告诉我使用XDocument的replaceNodes,但我没有得到任何结果
再次感谢您的回复。如果您想对组进行降序排序,则可以使用LINQ和OrderByDescending
XDocument doc = XDocument.Parse("<Root> <Group Price=\"50\"> <Item Price=\"60\"/> <Item Price=\"50\"/> <Item Price=\"70\"/> </Group> <Group Price=\"55\"> <Item Price=\"62\"/> <Item Price=\"57\"/> <Item Price=\"55\"/> </Group> <Group Price=\"61\"> <Item Price=\"62\"/> <Item Price=\"61\"/> <Item Price=\"65\"/> </Group> <!--More Group Nodes--> </Root> ");
IEnumerable<XElement> list = doc.Elements()
.Elements("Group")
.OrderByDescending(p => Convert.ToInt32(p.Attribute("Price").Value));
如果要按降序排列组,则可以使用LINQ和OrderByDescending
XDocument doc = XDocument.Parse("<Root> <Group Price=\"50\"> <Item Price=\"60\"/> <Item Price=\"50\"/> <Item Price=\"70\"/> </Group> <Group Price=\"55\"> <Item Price=\"62\"/> <Item Price=\"57\"/> <Item Price=\"55\"/> </Group> <Group Price=\"61\"> <Item Price=\"62\"/> <Item Price=\"61\"/> <Item Price=\"65\"/> </Group> <!--More Group Nodes--> </Root> ");
IEnumerable<XElement> list = doc.Elements()
.Elements("Group")
.OrderByDescending(p => Convert.ToInt32(p.Attribute("Price").Value));
请用通俗易懂的英语解释你想要达到的目标。是否要按组元素的价格属性值排序?您想要删除哪些元素,分组元素还是项目元素?请用简单的英语解释您想要实现的目标。是否要按组元素的价格属性值排序?您要删除哪些元素,分组元素还是项目元素?