2014-12-19 2 views
0

Я использую Saxon Processor для преобразования огромного XML-файла (+7,000 строк) в XML-файл RSS 2.0.Saxon Processor бросает исключения для href частей входного файла XML

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

Иногда в входном файле XML есть элемент, содержащий HREF как так,

<A href="https://www.google.com/maps/preview?q=tehran+iran&ie=UTF-8&hq=&hnear=0x3f8e00491ff3dcd9:0xf0b3697c567024bc,Tehran,+Iran&gl=us&ei=24iMU-jvFNLNsQTwi4DgAQ&ved=0CKsBELYDMBQ&source=newuser-ws">(map)</A> 

Саксонский процессор не нравится определенная часть этой строки, хотя. Вот сообщение об ошибке,

Error on line 837 column 62 of production.xml: SXXP0003: Error reported by XML parser: The reference to entity "ie" must end with the ';' delimiter. org.xml.sax.SAXParseException; systemId: file:/C:/XSLT/Test3/production.xml; lineNumber: 837; columnNumber: 62; The reference to entity "ie" must end with the ';' delimiter. 

Основе ошибки он появляется процессор получает параметр т.е. в URL строке запутанной с элементом XML.

Есть ли что-нибудь, что я мог бы добавить в таблицу стилей RSS 2.0 XSL, которая сообщила бы саксонскому процессору пропустить такие строки? Я на самом деле не нужна информация от <A>,

<A href="https://www.google.com/maps/preview?q=tehran+iran&ie=UTF-8&hq=&hnear=0x3f8e00491ff3dcd9:0xf0b3697c567024bc,Tehran,+Iran&gl=us&ei=24iMU-jvFNLNsQTwi4DgAQ&ved=0CKsBELYDMBQ&source=newuser-ws">(map)</A> 

Так что, если я мог бы пропустить такие строки целиком, и если это будет исправить ошибку, которая была бы велика. В качестве альтернативы, если есть подозрение, что у Saxon Processor есть ошибка, и другой процессор не вызовет этой проблемы, это тоже будет здорово (и если вы могли бы порекомендовать более подходящий процессор).

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Нет проблем с Saxon, у вас есть плохо сконструированный XML-документ. С http://www.w3.org/TR/REC-xml/#syntax «Символ амперсанда (&) и левая угловая скобка (<) не должны отображаться в их литеральной форме« – Rnet

+2

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

ответ

2

Входной XML не подходит. & должен быть экранирован. Вы можете исправить свой ввод, заменив все вхождения & на &amp;.

А также другие символы, которые вы должны были бы избежать, если присутствуют в вашем XML являются:

" с &quot;,

' с &apos;,

< с &lt; и

> с &gt;

+3

Не совсем. '>' не нужно экранировать. Цитата - одиночная или двойная - только проблематична внутри атрибутов **, если ** она конфликтует с окружающими цитатами. http://www.w3.org/TR/REC-xml/#syntax –