2013-05-03 2 views
1

У меня немного плохой XML, который я пытаюсь проанализировать в .NET. Этот же XML-файл расходуется другими анализаторами, то есть они более терпимы к ошибкам пользователя.Есть ли способ отключить или изменить строгость XML-парсера .NET?

XML-выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<kml> 
<Document id="12345"> 
    <name>My name</name> 
    <description>My Description</description> 
    <myns:author> 
    <myns:name>My Name</myns:name> 
    </myns:author> 
</Document> 
</kml> 

загружаю это так:

XmlDocument doc = new XmlDocument(); 
doc.Load(myFilePath); 

Эта вторая линия по праву бросает исключение:

'myns' is an undeclared prefix. Line 6, position 4.

Из приложения точка зрения, мы действуем в основном как канал другого приложение, которое может справиться с этим немного неправильным XML-файлом. Мы не хотим отклонять этот XML, который это стороннее приложение может обрабатывать.

Есть ли способ отключить или изменить строгость XML-парсера .NET?

+0

Добавьте соответствующие заявления Xmlns в файл XML. –

+0

Почему вы разбираете XML, если собираетесь просто передать его? – dlev

+1

, который не является XML. –

ответ

2

Все предыдущие ответы на удивление ошибочны.

Ваш документ является хорошо сформированным XML, но он не является правильно сформированным XML-пространством. Это означает, что он соответствует рекомендации XML, а не рекомендациям namespaces-in-XML. Это означает, что вы сможете проанализировать его, если вы можете найти парсер, позволяющий отключать обработку пространства имен.Я не знаю, если XML-анализатор Microsoft имеет такой вариант, но я не вижу здесь один:

http://msdn.microsoft.com/en-US/library/9khb6435(v=vs.80).aspx

2

Соответствующий XML-процессор (включая .NET API) не различает степени корректности, однако «незначительный». Входной сигнал либо well-formed, либо нет.

В зависимости от того, что вы хотите сделать с документом, у вас есть различные варианты его обработки, но все они будут включать в себя некоторую модификацию, или System.Xml, и компания будет бесполезна здесь.

6

Есть ли способ отключить или изменить строгость XML-парсера .NET?

Проверка схемы и подобные вещи являются необязательными, но это просто неверный XML. XML-парсеры обычно являются это строгий, и должно быть. Тот факт, что нисходящее приложение способно справиться с этим, является тревожным признаком, сам по себе, ИМО.

Варианты:

  • (Best) Зафиксируйте все, что продюсирует источник "XML" - если вы ответственны за код, а затем просто использовать XML API. Как правило, если вы пишете с помощью XML API, он будет делать правильные вещи
  • (Неплохо) Напишите промежуточный шаг, чтобы исправить плохой XML, прежде чем он перейдет через ваш основной код. Например, если просто вопрос о недопустимом префиксе пространства имен myns, вы можете исправить это, объявив его в корневом элементе. Вероятно, вы захотите загрузить файл по строкам, просто изменив второй (объявление XML-корня)
  • (Хуже, наверное) Даже не пытайтесь разобрать его как файл XML. Просто относитесь к нему как к необработанному тексту.
Смежные вопросы