1

我正在尝试从模板中复制一些 xml 节点以将它们放置在另一个 xml 中。xml的结构如下。

<grandparent>
    <parent>
        <children>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
        </children>
    </parent>
    <parent>
        <children>
            <grandchildren/>
            <grandchildren/>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
            <grandchildren/>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
            <grandchildren/>
            <grandchildren/>
        </children>
    </parent>
</grandparent>

我是否有可能遍历第二个父母和选定的孩子并抓住所有的孙子?并将所有的孙子插入另一个 xml 文件?

4

2 回答 2

2

你可以这样做:

        string input = @"<grandparent>
            <parent>
                <children>
                    <grandchildren/>
                </children>
                <children>
                    <grandchildren/>
                </children>
                <children>
                    <grandchildren/>
                </children>
            </parent>
            <parent>
                <children>
                    <grandchildren id=""1""/>
                    <grandchildren id=""2""/>
                    <grandchildren id=""3""/>
                </children>
                <children>
                    <grandchildren id=""4""/>
                    <grandchildren id=""5""/>
                    <grandchildren id=""6""/>
                </children>
                <children>
                    <grandchildren id=""7""/>
                    <grandchildren id=""8""/>
                    <grandchildren id=""9""/>
                </children>
            </parent>
        </grandparent>";

        XDocument doc = XDocument.Parse(input);
        // Use XDocument.Load method to load XML content from file
        //XDocument doc = XDocument.Load(<filepath>);

        IEnumerable<XElement> elements = doc
            .Root
            .Elements("parent")
            .ElementAt(1)
            .Descendants("grandchildren");

        XElement rootElement = new XElement("rootElement");
        rootElement.Add(elements);

        rootElement.Save(@"C:\Doc2.xml");

我认为您发布的 XML 不仅仅是一个片段,而是您希望解析的整个 XML 内容。这里棘手的部分是您通过它的序号访问元素,它应该通过parent元素上的某种 ID 属性来完成,因此可以通过比较它的 ID 而不是使用ElementAt根据它的序号位置检索元素的方法来访问它. 我添加了id属性,grandchildren因此可以看到grandchildren元素属于第二个parent元素,而不是第一个元素。

于 2012-08-24T08:00:44.977 回答
0
 XElement doc = XElement.Load("c:\\yourXML.xml");
 XElement newdoc = new XElement("GrandChildren");
 foreach (XElement x in doc.Descendants("parent").Skip(1).Descendants("children").Descendants("grandchildren"))
 {
       newdoc.Add(x);
 }

newDoc 现在包含您所需的 XML..

于 2012-08-24T08:12:32.643 回答