3

このウェブサイトのチュートリアルを試してみることにしました

http://www.csharphelp.com/2006/05/creating-a-xml-document-with-c/

これが私のコードです。これは多かれ少なかれ同じですが、少し読みやすいです

using System;
using System.Xml;

public class Mainclass
{
    public static void Main()
    {
        XmlDocument XmlDoc = new XmlDocument();

        XmlDocument xmldoc;
        XmlNode node1;
        node1 = XmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
        XmlDoc.AppendChild(node1);

        XmlElement element1;
        element1 = XmlDoc.CreateElement("", "ROOT", "");

        XmlText text1;
        text1 = XmlDoc.CreateTextNode("this is the text of the root element");

        element1.AppendChild(text1);
        // appends the text specified above to the element1

        XmlDoc.AppendChild(element1);


        // another element

        XmlElement element2;
        element2 = XmlDoc.CreateElement("", "AnotherElement", "");

        XmlText text2;
        text2 = XmlDoc.CreateTextNode("This is the text of this element");
        element2.AppendChild(text2);

        XmlDoc.ChildNodes.Item(1).AppendChild(element2);
    }
}

これまでのところ、私は XmlDocument が好きですが、この行がどのように機能するのかわかりません

XmlDoc.ChildNodes.Item(1).AppendChild(element2);

具体的には、その Item() 部分

MSDNによると...

//
// Summary:
//     Retrieves a node at the given index.
//
// Parameters:
//   index:
//     Zero-based index into the list of nodes.
//
// Returns:
//     The System.Xml.XmlNode in the collection. If index is greater than or equal
//     to the number of nodes in the list, this returns null.

ただし、「インデックス」が何を指しているのか、または Item() が何をしているのかはまだよくわかりません。それは木を下りますか、それとも枝を下りますか?

あと、見ていたらこんな感じになると思ってた

私が起こると思ったこと:

<?xml version="1.0"?>
<ROOT>this is the text of the root element</ROOT>
<AnotherElement>This is the text of this element</AnotherElement>

しかし、それはこのように終わった

実際の出力

<?xml version="1.0"?>
<ROOT>this is the text of the root element
      <AnotherElement>This is the text of this element</AnotherElement>
</ROOT>

(フォーマット追加)

4

1 に答える 1

2

このChildNodesプロパティは、呼び出した対象XmlNodeList直接の子の を返します。Item次に、そのリストの n 番目のメンバーを見つけます。孫などに再帰することはありません。特に、この場合Item(0)はXML宣言をItem(1)返し、ルート要素を返すと思います。「ルート要素に到達する」を表現するより適切な方法は、 を使用することXmlDocument.DocumentElementです。

「期待される」出力は有効な XML でさえないことに注意してください。XML ドキュメントはルート要素を 1 つしか持つことができません。

正直なところ、これはあまり良い使い方とは言えません。特に、XmlDocument可能な場合よりも LINQ to XML を使用することをお勧めします。与えられたコードで何を達成しようとしているのかは特に明確ではありませんが、ほぼ確実に LINQ to XML の方がはるかに簡単です。

于 2010-08-09T18:01:09.020 に答える