Это нормально, что (некоторые) сущности HTML нарушают механизм XSL? - PullRequest
1 голос
/ 22 июля 2011

У меня есть динамически сгенерированный документ XML, созданный с помощью PHP DOMDocument .Я использую этот XML с файлом XSL.Он работал нормально, пока я не получил символ валюты иены (¥) из записи базы данных.Этот символ экранируется в ¥ HTML-сущность.Этот объект нарушает работу механизма XSL / XML:

Предупреждение: DOMDocument :: load () [domdocument.load]: объект «иена» не определен в% file.xml%, строка:% 1% in% file.php% в строке% 2%

Когда сущности ¥ нет, все работает хорошо.

Есть что-то, что я не сделал / не включил/ настроен на получение этой ошибки?

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

XML распознает только несколько символов: &lt;, &gt; &quot;, &amp;, &apos;. Все остальное будет ошибкой разбора, если вы сами не добавите определения для сущностей: <!ENTITY yen "&#x00a5">

2 голосов
/ 22 июля 2011

С &yen; ваш XML становится не правильно сформированным XML, потому что у XML нет предопределенного объекта &yen;. Допустимая escape-версия ¥ - &#xA5;.

1 голос
/ 22 июля 2011

Когда речь идет о работе с XML, единственными объектами, которые определены по умолчанию, являются &amp;, &lt; и &gt;. Любые другие объекты должны быть определены в DTD.

XSL не определяет никаких других объектов в своем типе документа. Даже если вы конвертируете в (x) HTML, эти другие сущности не определены, потому что ваш основной тип документа предназначен для XSL.

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

Честно говоря, самое простое решение - просто использовать числовой код сущности для всего. Это боль, но она работает на любом диалекте XML без необходимости взлома с помощью DTD.

...