如何遍历XDocument的XElement节点并添加到另一个XElelement?

时间:2013-02-04 14:56:12

标签: c# xml linq-to-xml xelement

我有一个XML文档,如下所示:

<Person>
  <LastName>LastName1</LastName>
  <FirstName>FirstName1</FirstName>
  <MiddleName>MiddleName1</MiddleName>
</Person>

最初,我有一种创建此结构的方法,如下所示:

public XElement ToXML()
{
  return new XElement("Person",
    new XElement(this.LastName.ToXML()),
    new XElement(this.FirstName.ToXML()),
    new XElement(this.MiddleName.ToXML()));
}

问题是除了Person之外还有很多其他节点使用根目录中的Name值。所以我尝试做的是将FirstNameLastNameMiddleName元素重构为他们自己的可重用类,并使用ToXMLDoc()方法将这些元素作为{返回{1}}而不是XDocument(因为根将由需要名称为child的类决定;可能是XElementPerson等。

这是我的新Employee返回的内容:

ToXMLDoc

我的问题是,我现在要将此内容添加到 我的return new XDocument(new XElement(this.LastName.ToXML()), new XElement(this.FirstName.ToXML()), new XElement(this.MiddleName.ToXML())); 类添加的根XElement中。我尝试过类似下面的操作,但是我没有正确使用构造函数并且出现“ 不明确的构造函数引用 ”错误。

Person

如何从return new XElement("Person", foreach (XElement xe in NameType.ToXMLDoc().Nodes()) { new XElement(xe.Value); } ); 方法中获取内容并将其添加到为ToXMLDoc()创建的XElement节点?感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

您目前正在尝试在构造函数调用中嵌入foreach循环。这不会起作用 - 但实际上非常简单:

return new XElement("Person", NameType.ToXMLDoc()
                                      .Nodes()
                                      .Select(xe => new XElement(xe.Value));

确定你不只是想复制批发元素吗?在这种情况下,它只是:

return new XElement("Person", NameType.ToXMLDoc().Nodes());

答案 1 :(得分:0)

我会返回XElement,而不是XDocument

这样你就可以做到:

new XElement("Person", NameType.ToXMLDoc())