Есть ли простой способ использовать XSLT для обнаружения и исправления некорректно сформированного XML? - PullRequest
3 голосов
/ 21 апреля 2011

Например:

<doc xmlns="http://www.foo.org">
  <div id>
    <title>Mr. Title</title>
    <paragraph>This is one paragraph.</paragraph>
  </div>
</doc>

Обратите внимание, что тег div имеет идентификатор атрибута без присвоенного значения. Я хотел бы исправить это с помощью XSLT, но когда я применяю XSL к этому XML, перед обработкой выдает ошибку «Ошибка синтаксического анализа XML: неправильно сформирована». Кто-нибудь знает способ обойти это?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 21 апреля 2011

То, что вы хотите, не возможно.Даже если результат приложения XSL не должен быть правильно сформирован, входные данные для него должны быть.

2 голосов
/ 21 апреля 2011

Ответы о том, что для начала XSLT-преобразования необходимо иметь правильно сформированный (и проанализированный) XML-документ, верны.

Однако :

  1. В XSLT 2.0 наличие исходного XML-документа не требуется.

  2. И XSLT 1.0, и XSLT 2.0 оставляют реализации, что делать в случае document() функция не может проанализировать файл, идентифицируемый аргументом URI (созданным из).Если ваш XSLT-процессор не выдает ошибку и просто возвращает пустой набор узлов, это можно использовать в качестве метода для определения, является ли файл, идентифицируемый конкретным URI, правильно сформированным XML-документом или нет.

1 голос
/ 21 апреля 2011

В XSLT 2.0 вы можете использовать функцию doc-available(), которая возвращает false, если ресурс с данным URI не существует или если ресурс существует, но не является XML.Если вы знаете, какие ремонтные работы необходимы, вы можете попробовать выполнить их, прочитав ресурс с помощью функции unparsed-text() и обработав результат в виде текста.В общем, хотя, если кто-то отправляет вам плохой XML, тогда рекомендуется убедить их прекратить это делать.

1 голос
/ 21 апреля 2011

Нет.Перед применением XSLT к нему необходимо проанализировать XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...