C# 写一份带注释的XDocument
我有一个C# 写一份带注释的XDocument,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有一个XDocument,其中添加了一些注释(.AddAnnotation)。现在我想用这些注释写出文档。.ToString和.WriteTo都将丢弃注释,因此它们将无法工作。本质上,我需要一个自定义XML编写器,但是抽象类XmlWriter对元素和属性的注释没有任何概念。具体的问题是,我必须在使用特定注释的元素和使用属性的元素之前编写一些内容 我不必写每一个位(XMLWriter就是这样做的),而只处理我需要的两种情况(在元素之前加注释,在属性之前加注释)的解决方案将受到欢迎 我的一个部分解
XDocument
,其中添加了一些注释(.AddAnnotation
)。现在我想用这些注释写出文档。.ToString
和.WriteTo
都将丢弃注释,因此它们将无法工作。本质上,我需要一个自定义XML编写器,但是抽象类XmlWriter
对元素和属性的注释没有任何概念。具体的问题是,我必须在使用特定注释的元素和使用属性的元素之前编写一些内容
我不必写每一个位(XMLWriter就是这样做的),而只处理我需要的两种情况(在元素之前加注释,在属性之前加注释)的解决方案将受到欢迎
我的一个部分解决方案是,要么将带有此特定注释的元素包装到另一个元素中,但这会弄乱XML,无法处理属性。另一种解决方案是将注释替换为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 my:Something="Name ..." Name="Foo"/>
</Root>
但那真的不是我想要的
如果我能得到元素和属性的起始位置,那就太完美了。我正试图通过以下方式实现这一点:
鉴于注释是任意对象,因此它们不会被写出也就不足为奇了。它们实际上不是XML文档模型的一部分——它们只是LINQ对XML的补充。您需要在注释中保留什么?如果只是字符串数据,您可能希望创建一个属性(可能在您自己的名称空间中,这样很容易避免冲突)。诚然,如果您想向文本节点添加注释,这可能会很棘手,但您可以很容易地将它们添加到元素和属性中。(有两种不同类型的属性,其中一种指定作为其数据的一部分应用于哪个属性。)
基本上,如果您希望数据在XML表示中持久化,它将需要成为普通XML文档模型的一部分。鉴于注释是任意对象,因此它们不会被写出也就不足为奇了。它们实际上不是XML文档模型的一部分——它们只是LINQ对XML的补充。您需要在注释中保留什么?如果只是字符串数据,您可能希望创建一个属性(可能在您自己的名称空间中,这样很容易避免冲突)。诚然,如果您想向文本节点添加注释,这可能会很棘手,但您可以很容易地将它们添加到元素和属性中。(有两种不同类型的属性,其中一种指定作为其数据的一部分应用于哪个属性。) 基本上,如果您想在XML表示中持久化数据,它需要是普通XML文档模型的一部分。问题已解决:-) 使用
XDocument.Load(reader,LoadOptions.SetLineInfo)
我可以通过以下方式获取行的行号和位置:
var info = (IXmlLineInfo)element;
我需要的东西可以注入这些信息问题解决:-)
使用XDocument.Load(reader,LoadOptions.SetLineInfo)
我可以通过以下方式获取行的行号和位置:
var info = (IXmlLineInfo)element;
我需要的东西可以注入这些信息请看我想要的示例。请看我想要的示例。那么你是在问如何让Linq to XML输出无效的XML吗?我称之为自定义输出,但是;-)或者给我一个元素或属性的文本位置。那么你是在问如何让Linq to XML输出无效的XML吗?我称之为自定义输出,但是是;-)或者给我元素或属性的文本位置。