在编写xml文档时删除自闭合标记中的空格

jon*_*nii 11 c# xml linq-to-xml

在写出xml文档时,我需要编写所有自闭文本,不带任何空格,例如:

<foo/> 
Run Code Online (Sandbox Code Playgroud)

代替:

<foo />
Run Code Online (Sandbox Code Playgroud)

这样做的原因是,我正在与之接口的供应商系统会引发其他问题.在理想的世界中,供应商会修复他们的系统,但我不打算在短时间内发生这种情况.让XmlWriter在没有空格的情况下输出自闭关标签的最佳方法是什么?

我目前的计划是做类似的事情:

return xml.Replace(" />", "/>");
Run Code Online (Sandbox Code Playgroud)

显然这远非理想.是否可以为这一个操作继承XmlWriter?是否有一个设置作为我忽略的XmlWriterSettings的一部分?

Grz*_*ski 2

我认为没有这样的选项可以避免自闭标签中的一个空格。根据 MSDN 的说法XmlTextWriter

当写入空元素时,标签名称和结束标签之间会添加一个额外的空格,例如 。这提供了与旧版浏览器的兼容性。

希望您可以编写<elementName></elementName>语法而不是不需要的语法<elementName />来执行此XmlWriter.WriteFullEndElement操作,例如:

using System.Xml;
..

static void Main(string[] args)
{
    XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
    xmlWriterSettings.Indent = true;
    xmlWriterSettings.IndentChars = ("\t");
    xmlWriterSettings.OmitXmlDeclaration = true;
    XmlWriter writer = XmlWriter.Create("example.xml", xmlWriterSettings);

    writer.WriteStartElement("root");

    writer.WriteStartElement("element1");
    writer.WriteEndElement();

    writer.WriteStartElement("element2");
    writer.WriteFullEndElement();

    writer.WriteEndElement();
    writer.WriteEndDocument();
    writer.Close();
}
Run Code Online (Sandbox Code Playgroud)

生成以下 XML 文档:

<root>
    <element1 />
    <element2></element2>
</root>
Run Code Online (Sandbox Code Playgroud)