私はxmlドキュメントを持っていて、その下に別のxmlを追加したいと思います。 .NETでxmlクラスを使用すると、これを行う最も簡単な方法は何ですか(3.5を参照)。最も簡単なのように最も効率的な、または最速のように最短xmlドキュメントを既存のxmlドキュメントの末尾に追加
おかげ
私はxmlドキュメントを持っていて、その下に別のxmlを追加したいと思います。 .NETでxmlクラスを使用すると、これを行う最も簡単な方法は何ですか(3.5を参照)。最も簡単なのように最も効率的な、または最速のように最短xmlドキュメントを既存のxmlドキュメントの末尾に追加
おかげ
?たとえば:
XDocument doc1 = XDocument.Load(...);
XDocument doc2 = XDocument.Load(...);
// Copy the root element of doc2 to the end of doc1
doc1.Root.Add(doc2.Root);
doc1.Save(...);
はまた、あなたはたいことがあります。
// Copy the *contents* of the root element of doc2 to the end of doc1
doc1.Root.Add(doc2.Root.Descendants());
、あなたの要件についてより正確にすることができた場合は、我々はより多くのを助けることができるかもしれません。 XML文書にはルート要素が1つしかないので、ある文書を別の文書に置き換えることはできません。
私は効率が良いことを意味しましたが、それは洗練されたソリューションです。 – dotnetdev
@dotnetdev:そうしてみて、それがあなたがやりたいことに対して十分に効率的かどうかを見てください。単純なバージョンをテストする前に、より効率的だが読みにくいコードの作成を開始しないでください。 –
私は、XMLクラスを使用してこれを行うことができるとは思っていません。 XMLライブラリは通常、不正な形式のXMLを作成することからあなたを守ることを目的としており、2つのXML文書の連結は、文書ノードに2つの子要素があるために形成されません。
.Netライブラリでこれを行えるのであれば、バグとして提起することをお勧めします。
var xml = new XmlDocument();
xml.AppendChild(...);
xml.PrependChild(...);
あなた本当には、最速の方法は、線で最初のファイルの行を読んで、二番目のファイルに追加することであろう第二のルートノードを追加する場合。それは非常に汚い方法であり、は無効です xmlファイル!
System.IO.StreamWriter file1 = System.IO.File.AppendText(path);
System.IO.StreamReader file2 = new System.IO.StreamReader(path2)
while(!file2.EndOfStream)
{
file1.WriteLine(file2.ReadLine());
}
file1.Close();
file2.Close();
私はこの解決策が嫌いです。
私はノードなどで動作する多くのことを試しましたが、Jonの提案(下記)ははるかに読みやすく、意図がはっきりしています。 – dotnetdev