2013-10-04 4 views
3

У меня есть XML-файл, sample.xml, который содержит следующее:Простой способ сделать XML с кодами HTML?

<Tokens> 
    <Token>Hello&nbsp;World</Token> 
</Tokens> 

Я хочу, чтобы разобрать его - но получаю ошибки, когда он попадает в NBSP

У меня нет доступа к схема XML, которую я использую (тот, который определяет токен или токены).

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
doc = docBuilder.parse("sample.xml"); 

Поскольку у меня нет схемы для моего XML-документа, мне было интересно, если есть способ, чтобы он полностью игнорировать специальные символы HTML при разборе?

ответ

3

В XML &nbsp; является ссылкой на сущность, но неопределенным, если вы не указали определение. Вы не можете заставить анализатор XML игнорировать их, но вы можете определить их, например. начиная ваш документ с

<!DOCTYPE Tokens [<!ENTITY nbsp "&#xa0;">]> 

Однако это, вероятно, не полезно, если вы создаете XML-файл. Вы можете просто создать документ, содержащий реальный символ «» U + 00A0 NO-BREAK SPACE, или ссылку на символ &#xa0; или его десятичный эквивалент &#160;.

Cf. на вопрос How do I define HTML entity references inside a valid XML document?

0

То, о чем вы просите, невозможно, потому что для разбора запроса XML объект должен иметь определение где-то. Чтобы проанализировать его как XML, вам нужно написать собственный парсер или использовать толерантный парсер. XML не является супом для тегов.

0

XML не поддерживает &nbsp, хотя XHTML делает. Проверьте predefined entities in XML list

Решение состоит в использовании символа пробега Unicode без пробелов &#160 при построении XML; вместо. В некоторых случаях также работает простое пространство (&#32;). Прежде чем разбирать XML, вы можете попытаться заменить &nbsp на «-пространство».

0

Я согласен с Ридвальдом. Но в качестве обходного пути вы можете прочитать файл как строку и заменить поле   пробелами перед разбором документа.

Смежные вопросы