1

我已将 XmlDocument 加载到内存中并创建了新的 XmlElement。现在我正在尝试将 XmlElement 添加到路径 /report/section/hosts 但我不知道如何。我可以很容易地将它添加到 XML 的根节点下,但我无法弄清楚如何在 XML 中导航更深层次并只是附加到那里。在伪中,我正在尝试这样做:

doc.SelectNodes("/report/section/hosts").AppendChild(subRoot);

编码:

        XmlDocument doc = new XmlDocument();

        doc.Load("c:\\data.xml");

        //host
        XmlElement subRoot = doc.CreateElement("host");

        //Name
        XmlElement ElName = doc.CreateElement("name");
        XmlText TxtName = doc.CreateTextNode("text text");
        ElName.AppendChild(TxtName);
        subRoot.AppendChild(ElName);
        doc.DocumentElement.AppendChild(subRoot);

        doc.Save("c:\\data.xml");
4

4 回答 4

3

尝试 SelectSingleNode 而不是 SelectNodes

XmlElement parent = (XmlElement)doc.SelectSingleNode("/report/section/hosts")
parent.AppendChild(subRoot);
于 2009-02-13T12:31:14.920 回答
1

SelectNodes 方法返回节点列表。您应该改用 SelectSingleNode ...

例如(我的头顶,没有在 Visual Studio 中测试)

doc.SelectSingleNode("/report/section/hosts").AppendChild(subRoot);
于 2009-02-13T12:31:53.000 回答
1

你快到了。尝试使用 SelectSingleNode 代替:

XmlNode node = doc.SelectSingleNode("/report/section/hosts");
node.AppendChild(subRoot);
于 2009-02-13T12:34:12.013 回答
0

您需要在要附加到的文档(根除外)中获取对 XmlElement 的引用。XmlDocument 上有许多可用的方法,例如GetElementByIdSelectSingleNode它们以不同的方式为您做到这一点,研究品味。

也就是说,这方面的整个 API 通常被认为有点痛苦,你有 LINQ 可用吗?

于 2009-02-13T12:31:53.860 回答