Как я могу сделать мой xml безопасным для анализа (если в нем есть символ &)? - PullRequest
4 голосов
/ 11 мая 2011

Мне дали строку XML, которую мне нужно передать через анализатор.В настоящее время жалуется из-за недопустимого символа xml.Очень упрощенный пример:

<someXml>this & that</someXml>

Я знаю, что решение состоит в том, чтобы заменить & на &amp;, но я не генерирую XML и, следовательно, не могу контролировать значения.

Простая замена строки не является правильным способом для этого, так как «&» имеет особое значение в XML, а глобальная замена «&» на «&» разрушит специальное значение, которое было задумано.Есть ли решение взять полный XML-документ и «исправить» его так, чтобы «&» стало «&», но только там, где это было задумано?Могу ли я заменить глобально '&' на '&' (обратите внимание на пробелы с обеих сторон)?

Ответы [ 5 ]

8 голосов
/ 11 мая 2011

Я бы предложил попросить поставщика этого документа исправить это.На самом деле это , а не (действительный) XML!Если они подтвердили свою приверженность формату XML, они должны это исправить.

4 голосов
/ 11 мая 2011

Я думаю, что это интересный вопрос, потому что это ситуация, которая действительно может произойти в реальной жизни.Хотя я считаю, что правильнее всего сделать, попросить провайдера XML исправить XML и сделать его действительным, но я подумал, что один из вариантов - попытка использовать мягкий анализатор.Я провел некоторый поиск и обнаружил, что сообщение в блоге говорит об этой же проблеме и предлагает то же решение, о котором я думал.Вы можете попробовать с jsoup .Позвольте мне повторить, что я думаю, что это не лучшая вещь: вы должны действительно попросить провайдера XML исправить это.

0 голосов
/ 11 мая 2011

Неясно, производите ли вы XML самостоятельно из этого вопроса, но если вы это сделаете, вы можете использовать для этого библиотеку XML, поскольку она в первую очередь будет правильно обрабатывать кодирование.

Но звучит так, как будто это кусок XML, который вам дали, поэтому я бы порекомендовал использовать Apache Commons Lang для этого.У него есть класс 'StringEscapeUtils', в котором есть метод, который вы ищете, escapeXml (String).

0 голосов
/ 11 мая 2011

Почему бы не использовать раздел CDATA внутри любого тега XML, содержащего дополнительное содержимое XML? Тогда одинокий амперсанд не будет проблемой.

0 голосов
/ 11 мая 2011

Вы не можете сделать это, потому что вы уничтожаете символы XML (кодируете ее).Вы должны переписать свой код в библиотеку, которая генерирует XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...