Как исправить XML с незамкнутым тегом в Java - PullRequest
1 голос
/ 09 января 2010

Я анализирую XML в java, используя StaX, но мой XML не правильно сформирован, поэтому анализатор выдаст ошибку. В XML есть незакрытые теги

например:

<person>
  <name>John</name>
  <age>21
  ...
  ...
</person>

тег <age> не имеет закрытого тега </age>. Поэтому мне нужно сначала исправить XML ..

как я могу исправить XML, чтобы закрыть незамкнутый тег?

есть ли библиотека для этого? Я пробовал JTidy & HTMlCleaner, но я все еще не могу понять, как исправить XML. Мне нужна библиотека в Java, а не отдельное приложение. Спасибо

Ответы [ 3 ]

7 голосов
/ 09 января 2010

Я не думаю, что есть готовое решение для исправления XML. Это потому, что невозможно знать, если

<person>
  <name>John</name>
  <age>21
  <birthDate>...</birthDate>
  ...
</person>

должно быть

<person>
  <name>John</name>
  <age>21
  <birthDate>...</birthDate>
  </age>
  ...
</person>

или

<person>
  <name>John</name>
  <age>21</age>
  <birthDate>...</birthDate>
  ...
</person>

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

4 голосов
/ 12 января 2010

Найдите человека, который сгенерировал XML, и бейте его бессмысленно.

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

Написание кода для работы со своим дерьмовым кодом не является хорошим долгосрочным решением. Это ничего не делает для решения проблемы их дерьмового кода.

Я ценю, что это, вероятно, мало чем поможет.

0 голосов
/ 09 января 2010

Вместо исправления XML вы можете попробовать повернуть проверку с помощью:

XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...