Удалить пробелы в самозакрывающихся тегах при написании XML-документа - PullRequest
11 голосов
/ 06 июля 2011

При написании XML-документа мне нужно написать все самозакрывающиеся теги без пробелов, например:

<foo/> 

вместо:

<foo />

Причина этого в том, чточто система вендора, с которой я взаимодействую, не устраивает.В идеальном мире поставщик исправит свою систему, но я не думаю, что это произойдет в ближайшее время.Какой лучший способ заставить XmlWriter выводить самозакрывающиеся теги без пробела?

Моя текущая схема - сделать что-то вроде:

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

Очевидно, это далеко от идеала.Можно ли создать подкласс XmlWriter для этой одной операции?Есть ли параметр в составе XmlWriterSettings, который я пропустил?

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Я думаю, что нет такой опции, чтобы избежать одного пробела в самозакрывающемся теге. Согласно 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>
0 голосов
/ 06 января 2016

Попробуйте это:

 x.WriteStartElement("my-tag"); 

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

x.WriteEndElement();
0 голосов
/ 07 июля 2011

Используйте другой сериализатор, например сериализатор Saxon, который также работает в .NET. Так получилось, что саксонский сериализатор делает то, что ты хочешь.

Ужасно, конечно, выбирать продукты, основанные на случайном поведении, которое не потребует ни одна уважающая себя система, но вы должны принять реальность - если вы хотите торговать с идиотами, вы должны вести себя как идиот.

...