Димитр был прав, говоря, что в коде XSLT нет проблем. Однако это не проблема XSLT, это проблема синтаксического анализа.
Ваш документ содержит сущность –
, которая не является предопределенной сущностью XML. Таким образом, синтаксический анализатор не может заменить свое значение, если он не знает определения этого объекта. Это означает, что ваш XML действителен , если имеет доступ к DTD, в котором есть определение сущности –
. Это DTD может быть встроено внутри XML-документа (как в примере Димитра) или может быть определено во внешнем DTD, который упоминается в XML-документе. В вашем коде не было определений или ссылок DTD, но я полагаю, что вы скопировали только фрагмент из своего кода, поэтому DTD был случайно исключен.
Итак, что на самом деле вызывает вашу проблему
Даже если определение сущности доступно, это еще не означает, что анализатор обязательно выполняет замену значения сущности.
Рекомендация XML 1.0 гласит: (ref: http://www.w3.org/TR/xml/#wf-entdeclared)
Обратите внимание, что процессоры не проверяются
не обязаны читать и обрабатывать
объявления сущностей, происходящие в
параметры объекта или во внешнем
подмножество; для таких документов правило
что субъект должен быть объявлен как
ограничение правильности формирования, только если
автономный = 'да'.
и: (ref: http://www.w3.org/TR/xml/#include-if-valid)
Если объект является внешним, и
процессор не пытается
проверить документ XML,
процессор может, но не обязательно, включать
текст замены объекта. Если
не проверяющий процессор не
включите текст замены, он ДОЛЖЕН
сообщить приложению, что оно
признал, но не прочитал,
юридическое лицо.
Неясно, действительно ли ваш весь документ действительно правильно сформирован или нет, но ваш синтаксический анализатор проанализировал ваш документ, и кажется, что он удалил ссылку на объект без включения текста замены. Поэтому 1822–1895
интерпретируется как 18221895
. Процессор XSLT работает с анализируемой моделью данных, и если он не содержит этот символ тире, процессор XSLT не сможет скопировать его в полученный XML.
Я предлагаю вам убедиться, что у синтаксического анализатора есть доступ к DTD, где определены все сущности, и, возможно, также установить свой синтаксический анализатор в режим проверки.