xmldoc.Childnodes.item () вопрос - PullRequest
       25

xmldoc.Childnodes.item () вопрос

3 голосов
/ 09 августа 2010

Я решил попробовать учебник на этом сайте

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);

В частности, часть () его элемента

в соответствии с 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>

(добавлено форматирование)

1 Ответ

2 голосов
/ 09 августа 2010

Свойство ChildNodes возвращает XmlNodeList из непосредственных дочерних элементов того, на что вы его вызываете.Item затем находит n-го члена этого списка.Он не превратится в внуков и т. Д. В частности, я считаю, что в этом случае Item(0) вернет декларацию XML, а Item(1) вернет корневой элемент.Более хорошим способом выражения «добраться до корневого элемента» было бы использование XmlDocument.DocumentElement.

Обратите внимание, что ваш «ожидаемый» вывод даже не будет корректным XML - документ XML может иметь только один корневой элемент.

Если честно, это не очень удачное использование - и, в частности, я бы порекомендовал использовать LINQ to XML, а не XmlDocument, если это возможно.Не совсем понятно, чего вы пытаетесь достичь с помощью кода, который вы дали, но почти наверняка это будет на 1014 * намного проще в LINQ to XML.

...