【问题标题】:LINQ to XML: How to clone nodes while retaining annotations?LINQ to XML:如何在保留注释的同时克隆节点?
【发布时间】:2009-11-20 17:46:15
【问题描述】:

试试这个:

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

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

有什么想法可以在保留行号的同时克隆文档吗?我找到了this,但它没有保留 BaseUri,而且有点 hack。

【问题讨论】:

  • 在我的特殊情况下,我已经解决了这个问题,方法是保留对原始 XDocument 的引用,该引用从未修改过,仅用于查找行号和 BaseUris。

标签: .net xml linq


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 恐怕还是会丢失原来的 BaseUri 和行号信息。
    • 嗯,很遗憾,但是是的,当然会。你能用可以容纳原始 BaseUri 的东西来包装新实例吗?
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多