2017-12-05 13 views
-1

私はXML文字列と一意のタグ値を持っています。そのタグ値に基づいて、以下のXMLをどのように並べ替えることができますか?私は特定のタグの値を上部にしたい。Cで文字列xmlを並べ替える方法#

<DataSet> 
    <Row> 
    <APPROVER>DSQF</APPROVER> 
    <LEVEL>3</LEVEL> 
    <LEVELDECODE>Supervisor</LEVELDECODE> 
    </Row> 
    <Row> 
    <APPROVER>ASDQD</APPROVER> 
    <LEVEL>3</LEVEL> 
    <LEVELDECODE>Supervisor</LEVELDECODE> 
    </Row> 
    <Row> 
    <APPROVER>ASDQTH</APPROVER> 
    <LEVEL>3</LEVEL> 
    <LEVELDECODE>Supervisor</LEVELDECODE> 
    </Row> 
</DataSet> 

Iはapprover = ASDQD持つ行が(承認者がユーザにより選択された)上になりたいです。

+5

私は[XmlSerializerを](https://msdn.microsoft.com/en-us/library/systemを使用して、それを解析でしょう.xml.serialization.xmlserializer(v = vs.110).aspx)、Linqを使用してsort/orderbyを実行した後、新しいシリアル化を行います。 – fredrik

+1

なぜその行が上に表示されますか?あなたは正確に何をしようとしていますか? –

+0

ユーザーが承認者を選択し、選択した承認者に基づいてxmlの順序を変更する必要があります。 –

答えて

-1

私はhttp://xmltocsharp.azurewebsites.net/

生成されたクラスC#クラスを作成するためのページを使用します。承認者が注文するXMLSerialzer、その後、ラムダ式を使用する。その後

using System; 
using System.Xml.Serialization; 
using System.Collections.Generic; 
namespace Xml2CSharp 
{ 
    [XmlRoot(ElementName="Row")] 
    public class Row { 
     [XmlElement(ElementName="APPROVER")] 
     public string APPROVER { get; set; } 
     [XmlElement(ElementName="LEVEL")] 
     public string LEVEL { get; set; } 
     [XmlElement(ElementName="LEVELDECODE")] 
     public string LEVELDECODE { get; set; } 
    } 

    [XmlRoot(ElementName="DataSet")] 
    public class DataSet { 
     [XmlElement(ElementName="Row")] 
     public List<Row> Row { get; set; } 
    } 

} 

を。

+0

柔軟ではないアプローチ。 'XDocument'または' XElement'がその作業を行います。 – apocalypse

2

XElementを使用すると、XMLを操作して目的の行を先頭に移動できます。ここ
はそれを行う方法です:

// Parse the xml into an XElement 
XElement dataSet = XElement.Parse(xml); 

// Find the desired row based on the value of the APPROVER child element 
XElement row = dataSet.Elements("Row") 
         .FirstOrDefault(r => r.Element("APPROVER").Value == approver); 

// If the row is found 
if (row != null) 
{ 
    // Remove the row from its parent element (the dataSet) 
    row.Remove(); 

    // Reinsert the row as the first child of the dataSet 
    dataSet.AddFirst(row); 

    // Convert the XElement back to an xml string 
    xml = dataSet.ToString(); 
} 

の作業のデモ:https://dotnetfiddle.net/spmoM2

関連する問題