xstream преобразует & в & при преобразовании из XML в объекты Java - PullRequest
0 голосов
/ 20 января 2012

xstream преобразует & в & при преобразовании из XML в объекты Java. Я не хочу, чтобы это случилось. Как мне это сделать?

 XStream xstream = new XStream(new DomDriver());

            xstream.processAnnotations(HelpConfigVO.class);
            xstream.processAnnotations(ProductVO.class);
            xstream.processAnnotations(PackageVO.class);
            xstream.addImplicitCollection(HelpConfigVO.class, "packages");
            configVO = (HelpConfigVO)xstream.fromXML(helpConfigData);

Во-вторых, выходной XML, который я получаю из xstream, не отформатирован. Как мне отформатировать xml, чтобы сделать его читаемым?

Ответы [ 4 ]

3 голосов
/ 20 января 2012

xstream преобразует "&" в "&" при преобразовании из XML в объекты Java.

Как и должно быть.Это было бы сломано, если бы не

Я не хочу, чтобы это произошло.

Почему?"&" в XML означает "&".

Как мне это сделать?

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


Если правильное поведение в синтаксическом анализаторе вызывает у вас проблемы, вы 'у нас есть недостаток в дизайне вашего приложения.Вы должны сделать что-то вроде:

  • без разбора XML - сохраните его как последовательность символов, ИЛИ

  • заново вставьте символьные объекты, применив XMLэкранируйте отображение текста перед его использованием.

3 голосов
/ 20 января 2012

На веб-сайте программного обеспечения написано, что «XStream - это простая библиотека для сериализации объектов в XML и обратно».Поскольку & является XML для &, для него не имеет смысла не преобразовывать его, и я очень сомневаюсь, что в нем есть функция «Преобразовать в текст, за исключением амперсандов, которые по-прежнему будут XML».

Похоже, у вас проблема XY .Зачем вам нужно & в данных?

Если предположить, что это происходит из-за того, что вы выводите XML или HTML, подходящее решение - трактовать текст как текст и:

  • Используйте функцию «вставки текста» любой библиотеки, которую вы используете для создания XML / HTML (в отличие от функции «вставки разметки»)
  • Запуск текста через экранирующую функцию (например, Perl * 1015)* HTML :: Entities модуль или PHP htmlspecialchars функция (я недостаточно использую Java, чтобы рекомендовать его для этого языка, но принцип тот же)).
1 голос
/ 20 января 2012

Вы не можете. & означает амперсант; это правильно для xstream сделать это. Если вы действительно хотите, чтобы вывод был "&", вам нужно && в вашем коде или поместить его в секцию CDATA .

1 голос
/ 20 января 2012

& является сущностью XML.

См. https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML

Имеет смысл, что XStream удаляет его до & для строки Java.

...