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

时间:2011-07-06 18:02:17

标签: c# xml linq-to-xml

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

<foo/> 

而不是:

<foo />

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

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

return xml.Replace(" />", "/>");

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

3 个答案:

答案 0 :(得分:1)

我认为没有这样的选择可以避免自动关闭标签中的那个空格。根据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();
}

生成以下XML文档:

<root>
    <element1 />
    <element2></element2>
</root>

答案 1 :(得分:0)

使用不同的序列化程序,例如Saxon序列化程序,它也可以在.NET上运行。事实上,Saxon序列化器可以满足您的需求。

当然,选择基于意外行为的产品是非常可怕的,没有自尊的系统会要求,但你必须接受现实 - 如果你想与白痴交易,你必须表现得像个白痴。

答案 2 :(得分:0)

试试这个:

 x.WriteStartElement("my-tag"); 

//Value of your tag is null
If (<"my-tag"> == "")
{
 x.WriteWhitespace("");
}else
 x.WriteString(my-tag);

x.WriteEndElement();