0

次のような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値を使用するノード以外にも多くのノードがあることです。したがって、私が試したのは、、、、および要素をリファクタリングしてFirstName、それらの要素をaの代わりに返すメソッドを使用して独自の再利用可能なクラスに含めることでした(ルートは子という名前を必要とするクラスによって指定されるため、、など)LastNameMiddleNameToXMLDoc()XDocumentXElementPersonEmployee

これは私の新しいものToXMLDocです:

return new XDocument(new XElement(this.LastName.ToXML()),
                     new XElement(this.FirstName.ToXML()),
                     new XElement(this.MiddleName.ToXML()));

私の問題は、クラスによって追加されたルート内にこのコンテンツを追加したいということです。以下のようなことを試みましたが、コンストラクターを適切に使用しておらず、「あいまいなコンストラクター参照」エラーが発生します。XElementPerson

return new XElement("Person",
    foreach (XElement xe in NameType.ToXMLDoc().Nodes())
    {
      new XElement(xe.Value);
    }
);

メソッドからコンテンツを取得して、作成対象のノードにToXMLDoc()追加するにはどうすればよいですか?どんな助けでもありがたいです、ありがとう!XElementPerson

4

2 に答える 2

1

現在、コンストラクター呼び出しforeachにループを埋め込もうとしています。それはうまくいきませんが、実際には非常に簡単です。

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

要素を卸売りでコピーしたいだけではありません?その場合、それは次のようになります。

return new XElement("Person", NameType.ToXMLDoc().Nodes());
于 2013-02-04T14:58:42.730 に答える
0

XElement私はではなく、を返しますXDocument

このようにして、次のことができます。

new XElement("Person", NameType.ToXMLDoc())
于 2013-02-04T14:59:28.687 に答える