Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 重新排序XML节点和元素_C# 4.0_Linq To Xml - Fatal编程技术网

C# 4.0 重新排序XML节点和元素

C# 4.0 重新排序XML节点和元素,c#-4.0,linq-to-xml,C# 4.0,Linq To Xml,关于xml重新排序的工作 我的XML如下所示: <Subjects> <Subject> <Name></Name> <Height></Height> <Addresss> <Address> <City>AB</City> </Address> </Add

关于xml重新排序的工作 我的XML如下所示:

 <Subjects>
   <Subject>
     <Name></Name>
     <Height></Height>
     <Addresss>
        <Address>
           <City>AB</City>
        </Address>
     </Addresses>
   </Subject>
   <Subject>
     <Name></Name>
     <Height></Height>
     <Addresss>
        <Address>
           <City>CD</City>
        </Address>
     </Addresses>
   </Subject>
 </Subjects>
我使用XElement语法创建了这些xml,以便实现强制解析为XmlDocument。
如何在Xml LINQ中实现同样的功能

我认为在这个场景中应用XSLT(样式表)比使用LINQ更容易。如果您有任何示例,请与我分享。
<Order>
 <Subjects>
   <Subject>
     <Name></Name>
     <Height></Height>
     <Address ref="A1"/>
   </Subject>
   <Subject>
     <Name></Name>
     <Height></Height> 
     <Address ref="A2"/>      
   </Subject>
 </Subjects>
 <Addresss>
     <Address id="A1">
        <City>AB</City>
      </Address>      
      <Address id="A2">
        <City>AB</City>
      </Address>
  </Addresses>
</Order>
var index     = 0;
var output    = new XmlDocument();
var order     = output.AppendChild(output.CreateElement("Order"    ));
var subjects  = order .AppendChild(output.CreateElement("Subjects" ));
var addresses = order .AppendChild(output.CreateElement("Addresses"));
foreach (XmlElement subject in input.SelectNodes("/Subjects/Subject"))
{
  index++;
    var address = (XmlElement)subject.RemoveChild(subject.SelectSingleNode  ("Addresses"));
     address = (XmlElement)address.FirstChild;   // Addresses to Address
     address.SetAttribute("id", index.ToString());
     var newAddress = (XmlElement)subject.AppendChild(input.CreateElement("Address"));
     newAddress.SetAttribute("ref", index.ToString());
     subjects .AppendChild(output.ImportNode(subject, true));
     addresses.AppendChild(output.ImportNode(address, true));
     }
    output.Save(Console.Out);
   Console.ReadLine();