代码之家  ›  专栏  ›  技术社区  ›  Lasse Espeholt

写一份带注解的XDocument

  •  0
  • Lasse Espeholt  · 技术社区  · 15 年前

    我有一个 XDocument .AddAnnotation ). 现在我想用这些注释写出文档。两者 .ToString .WriteTo 将丢弃批注,使其无法工作。本质上,我需要一个定制的XML编写器,但是抽象类 XmlWriter 对元素和属性的注释没有任何概念。具体的问题是,我必须在一个元素前面写一些东西,这个元素有一个特定的注释,属性也是一样。

    XMLWriter 但只处理我需要的两种情况(在使用注释的元素之前和使用注释的属性之前)。

    XComment 而不是在元素和属性的元素之前。但之后我必须替换这些评论。我可能会使用上一个解决方案,但可能已经有注释,它们可能与我应用注释的格式相同。

    var annoAtt = new XAttribute("Name", "Foo");
    annoAtt.AddAnnotation(new Foo());
    
    var doc = new XDocument(
                new XElement("Root",
                    new XElement("Some",
                        annoAtt))));
    

    然后我希望将其作为输出(不是有效的XML,但我不需要):

    <Root>
       <Some {Something}Name="Foo"/>
    </Root>
    

    我可以做一些像:

    <Root>
       <Some my:Something="Name ..." Name="Foo"/>
    </Root>
    

    但那真的不是我想要的。

    如果我能得到元素和属性的起始位置,那就太完美了。我试图通过以下方式实现这一点:

    http://blogs.msdn.com/b/mikechampion/archive/2006/09/10/748408.aspx

    2 回复  |  直到 15 年前
        1
  •  4
  •   Jon Skeet    15 年前

    考虑到注释是任意对象,它们没有被写出就不足为奇了。它们并不是XML文档模型的一部分,只是LINQ对XML的补充。您需要什么来保存注释?如果只是字符串数据,您可能需要创建一个属性(可能在您自己的名称空间中,这样很容易避免冲突)。诚然,如果您想向文本节点添加注释,这可能会很棘手,但是您可以很容易地将它们添加到元素和属性中。(有两种不同的属性,其中一种指定它作为其数据的一部分应用于哪个属性。)

    基本上,如果您希望数据持久化在XML表示中,它将需要成为普通XML文档模型的一部分。

        2
  •  0
  •   Lasse Espeholt    15 年前

    问题解决:-)

    XDocument.Load(reader, LoadOptions.SetLineInfo)

    var info = (IXmlLineInfo)element;
    

    我需要的东西可以注入这些信息

    推荐文章