Удаление пробелов в закрывающих тегах при записи xml-документа
При написании XML-документа мне нужно написать все самозакрывающиеся теги без пробелов, например:
<foo/>
вместо:
<foo />
Причиной этого является то, что система поставщика, с которой я взаимодействую, бросает по-другому. В идеальном мире поставщик исправит свою систему, но я не уверен, что это произойдет в ближайшее время. Какой лучший способ получить XmlWriter для вывода закрывающих тегов без пробела?
Моя текущая схема - сделать что-то вроде:
return xml.Replace(" />", "/>");
Очевидно, это далеко не идеально. Можно ли подклассифицировать XmlWriter для этой одной операции? Есть ли настройка как часть XmlWriterSettings, которую я пропустил?
Ответы
Ответ 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>
Ответ 2
Используйте другой сериализатор, например саксонский сериализатор, который также работает в .NET. Так получилось, что саксонский сериализатор делает то, что вы хотите.
Ужасно, конечно, выбирать продукты, основанные на случайном поведении, которые не требуют никакой уважающей себя системы, но вы должны принять реальность - если вы хотите торговать с идиотами, вы должны вести себя как идиот.
Ответ 3
Попробуйте следующее:
x.WriteStartElement("my-tag");
//Value of your tag is null
If (<"my-tag"> == "")
{
x.WriteWhitespace("");
}else
x.WriteString(my-tag);
x.WriteEndElement();