Отформатируйте документ XMl, добавив "/" в конце тега - PullRequest
0 голосов
/ 01 октября 2009

Итак, у меня есть не очень хорошо отформатированный XML-документ, некоторые пустые теги () не имеют "/" в конце, пример: <loader local="test.bat" dir="/usr/home"> И как я могу элегантно (используя regex :)) добавить для каждого тега "loader" "/" в этом теге (используя Java); должно быть:

 <loader local="test.jpg" dir="/usr/home"/>

Ответы [ 3 ]

2 голосов
/ 01 октября 2009

Я не уверен, есть ли регулярное выражение, которое может сделать это в универсальном XML-документе, но если вы просто хотите преобразовать их в действительный XML, вы можете использовать tidy.

Например, встроенный в блокнот ++

TextFX - HTMLF Tidy TextFx - Tidy Reindent Xml

<abc>
    <loader local="test.jpg" dir="/usr/home"/>
</abc>

результаты в

<abc>
  <loader local="test.jpg" dir="/usr/home" />
</abc>

что, вероятно, то, что вы ожидаете. Tidy также доступен для интеграции в приложения, как это сделано в блокноте ++

1 голос
/ 01 октября 2009

Это может не сильно помочь, но я думаю, что в целом экономит время

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

Одним из основных преимуществ XML является то, что он является стандартом, и с ним можно использовать множество хорошо протестированных и поддерживающих инструментов. Если файл не является XML, то это еще одна недокументированная вещь, и каждый должен тратить время на борьбу с беспорядком.

Только если поставщик не исправит это, тогда сделайте кодирование - однако поставщик тогда не выполнил свой контракт, который влияет на то, как вы будете с ним обращаться в будущем.

0 голосов
/ 01 октября 2009

Обычный отказ от ответственности: обратите внимание, что регулярные выражения действительно не лучший выбор для обработки xml . Почти любое регулярное выражение, которое вы видите здесь, будет в некоторой форме ошибочным, поэтому регулярное выражение в этом ответе предназначено не для помещения в произвольный код, а для строго контролируемого использования.

Вот возможное решение (например, оно не будет работать, если в атрибутах есть закрывающие угловые скобки)

xml.replaceAll("<loader\\b(.*?)>", "<loader$1/>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...