Пропуск декларации типа документа XML при применении XSLT - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть XML-файлы, которые содержат тип документа:

<!DOCTYPE someName SYSTEM "fileName.dtd">

Файл предоставлен третьей стороной, я не могу контролировать, как он создается.Я использую XSLT для преобразования XML, но XSLT жалуется на то, что dtd не найден;как мне сказать XSLT пропустить его, чтобы он не пытался получить доступ к файлу dtd, которого у меня нет.

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 ноября 2011

Вы можете установить EntityResolver анализатора XML на EntityResolver, который заменяет локальный файл (возможно, пустой файл), когда запрашивается DTD. Создайте XMLReader (синтаксический анализатор) с этим параметром, затем укажите SAXSource, содержащий этот XMLReader, в качестве входного источника для преобразования.

0 голосов
/ 14 ноября 2011

Узнал, как это сделать для C #

XmlReaderSettings x = new XmlReaderSettings();
x.DtdProcessing = DtdProcessing.Ignore;
myXslTransform.Load(xslFile);
myXslTransform.Transform(XmlReader.Create(xslFile, x), XmlWriter.Create(xmlFileOutput));
0 голосов
/ 07 ноября 2011

Какой xslt-процессор вы используете?Вы должны найти способ отключить проверку для него.Например, для Java вы можете сделать это так: http://www.stylusstudio.com/xsllist/200205/post80150.html

Основная причина, почему это здесь: dtd может иметь данные по умолчанию, которые влияют на содержимое XML.Например, если атрибут «align» имеет значение по умолчанию «left», совпадение с шаблоном xslt «[@ align = 'left']» будет соответствовать, даже если атрибут отсутствует в XML.

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