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

XMLDocument の代わりに XDocument クラスを使用できます。これにより、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>

その場合、2 つの要素を「交換」することは、インデックス値を交換することになります。

于 2013-05-23T14:56:28.317 に答える