Saxon Processor генерирует исключения для частей href входного XML-файла

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

У меня нет контроля над входными 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>

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

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.

Судя по ошибке, процессор путает параметр ie в строке URL с элементом XML.

Есть ли что-нибудь, что я мог бы добавить в таблицу стилей RSS 2.0 XSL, чтобы заставить Saxon Processor пропускать такие строки? Мне на самом деле не нужна информация от <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 есть ошибка, и другой процессор не вызовет эту проблему, это тоже было бы здорово (и если бы вы могли порекомендовать более подходящий процессор).


person Kyle Bridenstine    schedule 19.12.2014    source источник
comment
Я отредактировал ваш заголовок. См. Должны ли вопросы включать «теги» в свои заголовки?, если нет единого мнения, не следует.   -  person John Saunders    schedule 20.12.2014
comment
С Saxon проблем нет, у вас есть плохо сконструированный xml-документ. Из w3.org/TR/REC-xml/#syntax Амперсанд символ (&) и левая угловая скобка (‹) не должны появляться в их буквальной форме   -  person Rnet    schedule 20.12.2014
comment
Два очка. Во-первых, жалуется не Saxon, а встроенный в него парсер XML. Во-вторых, правильно жаловаться. Ваш файл не XML. Попытка проанализировать неверный XML-код подобна попытке скомпилировать неверную программу Java, лучшее, на что вы можете надеяться, это хорошие сообщения об ошибках.   -  person Michael Kay    schedule 20.12.2014


Ответы (1)


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

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

" с &quot;,

' с &apos;,

< с &lt; и

> с &gt;

person Lingamurthy CS    schedule 19.12.2014
comment
Не совсем. > не нужно экранировать. Кавычка — одинарная или двойная — проблематична только внутри атрибутов, если она конфликтует с окружающими кавычками. w3.org/TR/REC-xml/#syntax - person michael.hor257k; 20.12.2014