0

假设有以下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,由“步骤”分隔。有没有办法直接在 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>
4

3 回答 3

3

您可以使用 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;
    }
}
于 2013-05-23T14:51:38.617 回答
1

终于成功了,代码如下:

        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);
于 2013-05-24T06:39:38.707 回答
1

在读取 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>

在这种情况下,“交换”两个元素将归结为交换索引值。

于 2013-05-23T14:56:28.317 回答