LINQ to XML:如何在保留注释的同时克隆节点?

时间:2009-11-20 17:46:15

标签: .net xml linq

试试这个:

var doc1 = XDocument.Load(@"C:\any.xml", LoadOptions.SetLineInfo);
var doc2 = new XDocument(doc1);

doc2不再有任何行号信息。使用Reflector挖掘,我可以看到,当节点从doc1克隆到doc2时,这不会保留XObject基类型上的注释,其中包括可通过IXmlLineInfo访问的行号信息。它也不保留BaseUri,我也需要它。

如何在保留行号的同时克隆文档?我发现this但是它没有保留BaseUri并且有点像黑客。

2 个答案:

答案 0 :(得分:1)

这至少保留了LineInfo(我没有尝试BaseUri,因为我不需要它):

using (var xmlReader = doc1 .CreateReader())
   doc2 = XDocument.Load(xmlReader, LoadOptions.SetLineInfo);

答案 1 :(得分:0)

您可以将其保存到内存流中,然后将其重新加载到XDocument的新实例中。