2015-06-05 16 views
1

Я хочу загрузить и прочитать DTD-файл, содержимое которого я не контролирую. Эти DTD файлы содержат строки с символами "-":Загрузить DTD с недопустимым символом "-"

< ЭЛЕМЕНТ испытаний ОИТ - O (предупреждение)>

Таким образом, ниже код не удается в положении "-"

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.CheckCharacters = false; 
settings.DtdProcessing = DtdProcessing.Parse; 
XmlReader reader = XmlReader.Create(strURL, settings); 
XDocument xml = XDocument.Load(reader); 
!

Можно ли прочитать DTD с незаконным символом?

+3

исследовали вы * почему * у вас есть сломанные DTDs? Я бы посоветовал вам приложить все усилия, чтобы решить корень проблемы, а не просто обойти ее. –

+0

Несколько компаний работают с этими DTD. Таким образом, будет трудно получить корень проблемы. Поэтому я вынужден работать с настоящим DTD ... – AlexNew

+0

Я добавил к вопросу информацию, что вы не контролируете эти DTD. –

ответ

1

Ваш DTD, по-видимому, предназначен для системы, которая обрабатывает SGML, а не XML. Трудно сказать, что вы должны сделать по этому поводу, но неудивительно, что XML-библиотека отклоняет DTD.

Часть декларации этого элемента, <!ELEMENT Test-ITD - O (warning) >, предоставляет «параметры минимизации». Это означает, что конечный тег элемента может быть опущен. Это функция, доступная в SGML, но не в XML.

Вторая декларация проблематичной элемент упоминается в комментарии:

<!ELEMENT emphasis (#PCDATA | quantity | indexFlag | emphasis | subScript | superScript | captionGroup)+ > 

Эта конструкция не работает из-за ограничений в отношении «смешанного содержания». Нельзя использовать квантор +; допускается только *.

Ссылки:

+0

Итак, нет никакой возможности загрузить этот DTD? – AlexNew

+0

Наверное, нет. Возможно, вы можете связаться с людьми, которые предоставляют DTD, и сообщить им, что вы не можете использовать его, потому что это не XML DTD. – mzjn