XMLStarles удаляет закрывающий тег

Проблемы с xmlstar. Он удаляет пустые теги, как это отключить?

вход:

<tag1>test1</tag1>
<tag3></tag3>
<tag4>test3</tag4>

выход:

<tag1>test1</tag1>
<tag3/>
<tag4>test3</tag4>

И я хочу такой же вывод, поэтому он не удаляет закрывающую кавычку.

Надеюсь, у кого-то есть быстрый ответ.


person lskov    schedule 09.01.2014    source источник


Ответы (2)


В XML <a></a> и <a/> (обратите внимание на /) семантически идентичны. Какое бы приложение ни использовало документ, это изменение не должно волновать его.

Я ничего не знаю о xmlstarlet в частности, но если его сериализатор не имеет возможности создавать более подробную форму, вам может потребоваться постобработка документа.

Если вам абсолютно необходима предыдущая версия, у вас есть четыре варианта: найти XML-сериализатор, который будет записывать пустые элементы в этой форме (может быть или не быть вариант в том, который вы используете), изменить XML-сериализатор для записи из пустых элементов в этой форме, напишите свой собственный сериализатор XML (не рекомендуется; это не очень сложно, но если вы задаете этот вопрос, есть детали, которые доставят вам проблемы) или постобработайте текст после его написания, чтобы изменить все экземпляры с <a></a> по <a/>.

На самом деле есть еще одна возможность. Если причина, по которой ваша другая программа нуждается в длинной форме, заключается в том, что она ожидает HTML, вам следует использовать сериализатор HTML, а не сериализатор XML.

person keshlam    schedule 09.01.2014

Я знаю, что это то же самое. Но причина, по которой мне нужен инструмент, это то, что он не поддерживает этот формат xml. Нужен закрывающий тег.

Так что мне будет интересно, чтобы здесь у кого-нибудь есть идея.

Заголовок файла есть. Так что это демонстративно инструмент, читающий файл.

<?xml version="1.0" encoding="iso-8859-1"?>

<project>
  <fileVersion>2</fileVersion>
  <configuration>
    <name>Debug</name>
    <toolchain>
      <name>ARM</name>
    </toolchain>
person lskov    schedule 10.01.2014