Почему амперсанд интерпретируется как дочерний элемент на текстовом узле - PullRequest
1 голос
/ 25 января 2010

У меня есть XML-файл, который я анализирую, и у меня есть следующий тег ...

<desc>
/wap/news/text.jsp?sid=242&nid=5662369&cid=5038&scid=-1
</desc>

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

Когда я анализирую это, тег desc имеет один дочерний элемент, текстовый узел со значением ...

/wap/news/text.jsp?sid=242

но остальная часть строки анализируется как 6 дочерних узлов на вышеупомянутом текстовом узле со значениями ...

&
nid=5662369
&
cid=5038
&
scid=-1

Как заставить синтаксический анализатор обрабатывать это как одинтекстовый узел, а не интерпретировать символы '&' как дочерние узлы.

Соответствующий код синтаксического анализа приведен ниже.

HttpConnection c = (HttpConnection) Connector.open(inURL.toString(), Connector.READ);
is = c.openInputStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
factory.setAllowUndefinedNamespaces(true);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(is);

Это код J2ME для ежевики, поэтому я довольно ограничен, так какк API, которые у меня есть.

Ответы [ 2 ]

3 голосов
/ 25 января 2010

& - это специальный символ в XML. Это должно быть экранировано как &amp;.

Если что-то создает указанный выше текстовый файл, значит, он не выдает действительный XML.

0 голосов
/ 20 февраля 2011

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

http://www.drillio.com/en/software-development/java/fragmented-xml-text-nodes/

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