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