xml节点父ID c#

时间:2012-08-24 07:44:50

标签: c# xml

我正在尝试从模板中复制一些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文件中?

2 个答案:

答案 0 :(得分: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元素,而不是第一个元素。

答案 1 :(得分: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 ..