在写出xml文档时,我需要编写所有自闭文本标签,不带任何空格,例如:
<foo/>
而不是:
<foo />
这样做的原因是我正在与之接口的供应商系统会引发其他问题。在理想的世界中,供应商会修复他们的系统,但我不打算在短时间内发生这种情况。让XmlWriter在没有空格的情况下输出自闭关标签的最佳方法是什么?
我目前的计划是做类似的事情:
return xml.Replace(" />", "/>");
显然这远非理想。是否可以为这一个操作继承XmlWriter?是否有一个设置作为我忽略的XmlWriterSettings的一部分?
答案 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();