使用linq将基本xml文件拆分为保留少量标记的xml文件

本文关键字:xml 文件 保留 拆分 linq 使用 | 更新日期: 2023-09-27 18:28:12

我有这个xml,并希望根据<order>标记计数拆分为单独的xml文件,从基本xml中保留几个标记。由于我是xml和linq的新手,所以我只是在谷歌上搜索,关于堆栈溢出的问题不符合我的要求。

<OrderList>
<Source>xml</Source>
<Organisation>org</Organisation>
<CreationDate>12/14/2015</CreationDate>
<Orders>
 <Order>
    <Name> Mobile </Name>
    <Price> 50.00</Price>
    <Quantity> 1 </Quantity>
 </Order>
  <Order>
    <Name> Accessories </Name>
    <Price> 50.00</Price>
    <Quantity> 5 </Quantity>
 </Order>
 </Orders>
</OrderList>

所以File1.xml应该是

<OrderList>
<Source>xml</Source>
<Organisation>org</Organisation>
<CreationDate>12/14/2015</CreationDate>
<Orders>
 <Order>
    <Name> Mobile </Name>
    <Price> 50.00</Price>
    <Quantity> 1 </Quantity>
 </Order>
 </Orders>
 </OrderList>

File2.xml

<OrderList>
<Source>xml</Source>
<Organisation>org</Organisation>
<CreationDate>12/14/2015</CreationDate>
<Orders>
 <Order>
    <Name> Accessories </Name>
    <Price> 50.00</Price>
    <Quantity> 5 </Quantity>
 </Order>
 </Orders>
 </OrderList>

stackoverflow中前面的问题解释了如何将标记拆分到xml文件中,但我也想从基本文件中保留一些值。有人能用Linq和XElement帮忙吗?

使用linq将基本xml文件拆分为保留少量标记的xml文件

如果你想将Orders拆分为两个OrderList,你可以尝试这样的方法,你不需要创建同一个节点,它将从ordersXML中复制,并创建新的Orders

XElement ordersXML = XElement.Parse(XML_ORDERS);        
var ordersElement = ordersXML.Element("Orders");
var orders = ordersElement.Elements("Order");
var newOrdersList = orders.Select(x => new XStreamingElement("OrderList", ordersXML.Elements().Where(e => e.Name!="Orders"), new XElement("Orders",x)));

看看我的.NET Fiddle。