2016-05-18 3 views
0

я следующий XML-схемыInvalid XDocument становится подтверждено

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" 
      targetNamespace="http://www.MySchema.net" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="RootElement"> 
    <xs:complexType> 
     <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="name" type="xs:string" /> 
     </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

и следующие XML, сверяются выше схеме:

Случай 1: (исключение схемы)

<?xml version="1.0" encoding="utf-8" ?> <RootElement11 name="Configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.MySchema.net Root" xmlns="http://www.MySchema.net"> 
    </RootElement11> 

Случай 2: (Без исключения)

<?xml version="1.0" encoding="utf-8" ?> 
<RootElement11 name="Configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.YourSchema.net Root" xmlns="http://www.YourSchema.net"> 
</RootElement11> 

Случай 3: (без исключения)

<RootElement11 name="Configuration"> 
</RootElement11> 

Для случая 1, я получаю ожидаемое исключение, но случай 2 и 3 случая проверяются без исключения «Элемент„http://www.MySchema.net:RootElement1“не объявлен.».

Я хотел знать, есть ли возможность генерировать исключение, когда xml-файлы с ложными пространствами имен или без пространств имен проверяются с использованием метода XDocument.Validate.

Я нашел info, которые используют XmlReader с настройками, чтобы выбросить этот тип исключения. Я вижу две возможности: 1) Вернитесь к XmlReader из XDocument, 2) Подтвердите использование XmlReader и используйте XDocument для выполнения запросов LINQ. Но возможно ли это сделать без XmlReader.

+0

Я бы создал метод расширения для XDocument, и в этом методе для проверки можно использовать XmlReader над XDocument.CreateReader. Так что в основном 2-й метод. – Evk

+0

Возможный дубликат [XDocument.Validate всегда успешно] (http://stackoverflow.com/questions/17232575/xdocument-validate-is-always-successful) –

ответ

1

Проблема в том, что оба случая 2 и 3 действительны для схемы - ваша схема не имеет никакого мнения об элементах в пространствах имен, отличных от его targetNamespace.

XmlReader может вернуть предупреждение для этого, но нет никакой перегрузки для XDocument, который сделает это. Фрагмент в вашем linked question использует XmlReader wrapper around XDocument, я не понимаю, почему у вас возникнет проблема с этим.

 Смежные вопросы

  • Нет связанных вопросов^_^