簡體   English   中英

在xmlNodeList C#中交換節點

[英]Swapping nodes in xmlNodeList C#

假設具有以下xml

<test>
    <step>
        <var name="name1" />
        <var name="name2" />
    </step>

    <step>
        <var name="name3" />
        <var name="name4" />
    </step>

    <step>
        <var name="name5" />
        <var name="name6" />
    </step>

</test>

我正在使用XmlNodeList,以“ step”分隔。 有沒有一種方法可以直接在xmlnodelist中交換或替換步驟?

需要這樣:

<test>
    <step>
        <var name="name3" />
        <var name="name4" />
    </step>

    <step>
        <var name="name1" />
        <var name="name2" />
    </step>

    <step>
        <var name="name5" />
        <var name="name6" />
    </step>

</test>

您可以使用XDocument類代替XMLDocument。 這會將var節點name3與name6交換。

using System.Linq;
using System.Xml.Linq;
class Test
{

    static void Main()
    {
        XDocument document = XDocument.Load("test.xml");
        Swap("name3", "name6", document);
        document.Save("test.xml");
    }

    static void Swap(string nameOne, string nameTwo, XDocument document)
    {
        var nameOneNode = document.Descendants("var").FirstOrDefault(p => p.Attribute("name").Value == nameOne);
        var nameTwoNode = document.Descendants("var").FirstOrDefault(p => p.Attribute("name").Value == nameTwo);
        nameOneNode.Attribute("name").Value = nameTwo;
        nameTwoNode.Attribute("name").Value = nameOne;
    }
}

讀取XML文件時,不必一定要保留XML文件中節點的順序。 例如,如果您的文件如下所示:

<xmlcontent>
    <node value="Hello" />
    <node value="World" />
</xmlcontent>

讀取的XML可能返回以下節點:

<xmlcontent>
    <node value="World" />
    <node value="Hello" />
</xmlcontent>

要將“順序”之類的內容應用於XML節點,您需要添加一個可以排序的屬性,例如

<xmlcontent>
    <node index="1" value="Hello" />
    <node index="2" value="World" />
</xmlcontent>

在這種情況下,“交換”兩個元素將歸結為交換索引值。

終於設法做到了,下面是代碼:

        XmlDocument xml;
        XmlNodeList xmlList;

        xml = new XmlDocument();
        xml.Load(path);

        xmlList = xml.GetElementsByTagName("step");

        XmlNode refNode = xmlList[1];

        XmlNode newNode = xmlList[0];

        xml.DocumentElement.InsertAfter(newNode, refNode);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM