2016-05-18 7 views
0
validiert

Ich habe folgende XML-SchemaUngültige XDocument wird immer

<?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> 

und folgende xml die gegen oben Schema validiert:

Fall 1: (Schema Ausnahme)

<?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> 

Fall 2: (Keine Ausnahme)

<?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> 

Fall 3: (keine Ausnahme)

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

für den Fall 1, erhalte ich eine erwartete Ausnahme, dass, aber Fall 2 und Fall 3 sind ausnahmslos validiert „Das‚http://www.MySchema.net:RootElement1‘Element nicht deklariert ist.“.

Ich wollte wissen, ob es eine Möglichkeit gibt, eine Ausnahme auszulösen, wenn XML-Dateien mit falschen Namespaces oder ohne Namespaces mit der XDocument.Validate-Methode validiert werden.

Ich habe einige info gefunden, die XmlReader mit Einstellungen verwenden, um diese Art von Ausnahme auszulösen. Ich sehe zwei Möglichkeiten 1) Zurück zu XmlReader von XDocument, 2) Validiere mit XmlReader und benutze XDocument, um LINQ-Abfragen durchzuführen. Aber ist es möglich, dies ohne XmlReader zu erreichen.

+0

Ich würde eine Erweiterungsmethode für XDocument erstellen, und in dieser Methode XmlReader über XDocument.CreateReader für die Validierung verwenden. Also grundsätzlich 2. Methode. – Evk

+0

Mögliches Duplikat von [XDocument.Validate ist immer erfolgreich] (http://stackoverflow.com/questions/17232575/xdocument-validate-is-always-successful) –

Antwort

1

Das Problem ist, dass beide Fälle 2 und 3 für das Schema gültig sind - Ihr Schema hat keine Meinung zu Elementen in anderen Namespaces als targetNamespace.

XmlReader kann eine Warnung für diese zurückgeben, aber es gibt keine Überlastung für XDocument, die es tun wird. Der Ausschnitt in Ihrem linked question verwendet eine XmlReader wrapper around XDocument, ich kann nicht sehen, warum Sie irgendein Problem damit haben würden, dies auf diese Weise zu tun.