2013-11-27 3 views
0

У меня есть структура Xml.Multi Element Sort XmlDocument [WITHOUT LINQ]

<Root> 
<Customers> 
<Customer> 
<ID1>100</ID1> 
<ID2>5555</ID2> 
<OtherElements /> 
</Customer> 
<Customer> 
<ID1>200</ID1> 
<ID2>445</ID2> 
<OtherElements /> 
</Customer> 
<Customer> 
<ID1>30</ID1> 
<ID2>58878</ID2> 
<OtherElements /> 
</Customer> 
<Customers> 
</Root> 

Я хотел бы переставить Узлы клиентов с ID1 ASC, ASC И ID2 порядок сортировки. Пожалуйста, помогите мне достичь этого без XSLT и LINQ.

Благодаря

+0

Опубликовать хорошо сформированный образец XML для начала, в настоящее время ваш образец имеет один '' начальный тег, но несколько '' конечных тегов, так что это не хорошо сформированный документ. –

ответ

3

Ну реализация XPath/XSLT платформы .NET разоблачает функции сортировки по XPathExpression:

 XmlDocument doc = new XmlDocument(); 
     doc.Load("file.xml"); 

     XPathExpression customers = XPathExpression.Compile("/Root/Customers/Customer"); 
     customers.AddSort("ID1", XmlSortOrder.Ascending, XmlCaseOrder.LowerFirst, "", XmlDataType.Number); 
     customers.AddSort("ID2", XmlSortOrder.Ascending, XmlCaseOrder.LowerFirst, "", XmlDataType.Number); 

     XmlElement parent = doc.DocumentElement["Customers"]; 
     foreach (XPathNavigator cust in doc.CreateNavigator().Select(customers)) 
     { 
      parent.AppendChild(cust.UnderlyingObject as XmlNode); 
     } 

     doc.Save(Console.Out); // for testing, use Save("file.xml") to save 

с входом будучи

<?xml version="1.0" encoding="utf-8" ?> 
<Root> 
<Customers> 
<Customer> 
<ID1>100</ID1> 
<ID2>5555</ID2> 
<OtherElements /> 
</Customer> 
    <Customer> 
<ID1>200</ID1> 
<ID2>445</ID2> 
<OtherElements /> 
</Customer> 
    <Customer> 
<ID1>30</ID1> 
<ID2>58878</ID2> 
<OtherElements /> 
</Customer> 
</Customers> 
</Root> 

выход

<Root> 
    <Customers> 
    <Customer> 
     <ID1>30</ID1> 
     <ID2>58878</ID2> 
     <OtherElements /> 
    </Customer> 
    <Customer> 
     <ID1>100</ID1> 
     <ID2>5555</ID2> 
     <OtherElements /> 
    </Customer> 
    <Customer> 
     <ID1>200</ID1> 
     <ID2>445</ID2> 
     <OtherElements /> 
    </Customer> 
    </Customers> 
</Root> 
+0

Это работает. Большое спасибо. – VaibhavR