使用xmlwriter在c#中编写空xml元素

使用xmlwriter在c#中编写空xml元素,c#,xml,xmlwriter,writeelementstring,C#,Xml,Xmlwriter,Writeelementstring,我使用xmlwriter来编辑xml文件,但我需要它来维护特定的格式,以便将来与其他xml文件进行比较 我使用以下代码编写空元素: w.WriteStartElement("description"); w.WriteEndElement(); xml文件中的结果是: 这通常是可以的,但我需要它看起来像这样: “description”后不带空格字符 有什么方法可以做到这一点吗?这两种形式都是有效的XML,您使用的任何系统都应该能够解析这两种形式,以免它不是XML解析器 我现在不在电脑前,

我使用xmlwriter来编辑xml文件,但我需要它来维护特定的格式,以便将来与其他xml文件进行比较

我使用以下代码编写空元素:

w.WriteStartElement("description");
w.WriteEndElement();
xml文件中的结果是:

这通常是可以的,但我需要它看起来像这样:

“description”后不带空格字符


有什么方法可以做到这一点吗?

这两种形式都是有效的XML,您使用的任何系统都应该能够解析这两种形式,以免它不是XML解析器

我现在不在电脑前,但我觉得这样可以:

Var myModifiedXmlString = w.ToString().Replace(" />", "/>");

这两种形式都是有效的XML,您使用的任何系统都应该能够解析这两种形式,以免它不是XML解析器

我现在不在电脑前,但我觉得这样可以:

Var myModifiedXmlString = w.ToString().Replace(" />", "/>");

XML不是文本。规则是不同的。通常,不能使用文本比较来比较XML文件。您给出的两个示例是相同的XML,但正如您所指出的,它们是不同的文本


您可以通过预处理要比较的文件来实现这一点,例如将所有属性按相同的顺序排列,也许每行一个属性;通过将元素按规范顺序放置,对同一名称空间使用相同的前缀等,然后您必须告诉文本比较工具忽略空白等。

XML不是文本。规则是不同的。通常,不能使用文本比较来比较XML文件。您给出的两个示例是相同的XML,但正如您所指出的,它们是不同的文本

您可以通过预处理要比较的文件来实现这一点,例如将所有属性按相同的顺序排列,也许每行一个属性;通过将元素按规范顺序放置,对同一名称空间使用相同的前缀等。然后,您必须告诉文本比较工具忽略空白等。

查看,例如:

w.WriteRaw(“”);
查看,例如:

w.WriteRaw(“”);


我知道这两种形式都是有效的xml,但不幸的是,我使用的是Ortoise_svn的diff程序,因为我所有的xml文件都在svn存储库中,这就是为什么我需要这种(xml不需要)进动。因此,由于您的存储库,更改源代码对您来说是有意义的?不,当然不是。我原以为会有一些我可以更改的设置来删除空白,但我想唯一的解决方案是将带有额外空白的文件签入(提交)到存储库中,这样我在存储库中有相同形式的空元素。我会使用超越比较。它能够进行基于上下文逻辑的比较,并将解决此问题和许多其他比较问题。开发者许可证大约30美元。Beyond compare是一个功能强大的比较工具,我的公司也有许可证。我知道这两种形式都是有效的xml,但不幸的是,我使用的是Ortoise_svn的diff程序,因为我所有的xml文件都在svn存储库中,这就是为什么我需要这种(不需要xml)进动。所以,因为您的存储库而更改源代码对您来说是有意义的吗?不,当然不是。我原以为会有一些我可以更改的设置来删除空白,但我想唯一的解决方案是将带有额外空白的文件签入(提交)到存储库中,这样我在存储库中有相同形式的空元素。我会使用超越比较。它能够进行基于上下文逻辑的比较,并将解决此问题和许多其他比较问题。开发者许可证大约30美元。Beyond compare是一个功能强大的比较工具,我的公司也有许可证。我尝试使用writeraw,但它破坏了的所有兄弟中的所有新行字符处理程序,我在的父元素中得到了一行包含的所有兄弟元素:我尝试使用writeraw,但是它破坏了的所有兄弟元素中的所有新行charecter,我在的父元素中得到了一行所有兄弟元素:我尝试了你的方式,但没有改变:
w.writeStarteElement(“description”);w、 写删除();w、 ToString()。替换(“/>”和“/>”)
@eitanx,Replace方法返回修改后的XML字符串,它不会就地更改XML。因此,我需要使用类似writeraw()的内容来更改XML文件,而这是我无法做到的,因为writeraw()会中断所有同级中的所有新行字符。您需要使用“myModifiedXmlString”我尝试了你的方法,但没有任何改变:
w.writeStarteElement(“description”);w、 写删除();w、 ToString()。替换(“/>”和“/>”)
@eitanx,Replace方法返回修改后的XML字符串,它不会就地更改XML。因此,我需要使用类似writeraw()的内容来更改XML文件,而这是我无法做到的,因为writeraw()会中断所有同级中的所有新行字符。您需要使用“myModifiedXmlString”并对其进行比较,而不是使用“xml”。