verwendetes Datenbanksystem: <XML>
Hallo Community,
ich habe folgendes gefunden:
Habe eine kleines Konsolen-Programm geschrieben welches mir über einen XmlReader eine XMl-Datei gegen ein XSD validieren soll. Aber die Validierung läuft auch gegen komplett andere Xml#s durch.
Hier der Code:
C#-Code: |
using System;
using System.Xml;
using System.Xml.Schema;
class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add(null, "books.xsd");
booksSettings.Schemas.Compile();
booksSettings.ValidationType = ValidationType.Schema;
XmlReader books = XmlReader.Create("Adressen.xml", booksSettings);
int i=1;
try
{
while (books.Read())
{
Console.WriteLine($"Zeile gelesen {i}");
Console.WriteLine(books.Name);
Console.WriteLine(books.Value);
i++;
}
}
catch (Exception e)
{
Console.Write(e.ToString());
}
}
static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
}
|
Das Schema:
XML-Code: |
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
|
und zwei Xml's
XML-Code: |
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
|
validiert nicht, da der Knoten "Name" fehlt.
XML-Code: |
<?xml version="1.0" encoding="utf-8"?>
<Adressen>
<Adresse>
<Name>Müller, Lieschen</Name>
<Strasse>Musterstr.</Strasse>
<Hausnummer>4</Hausnummer>
<Plz>0815</Plz>
<Ort>Musterdorf</Ort>
</Adresse>
</Adressen>
|
Validiert, obwohl dieses XML nichts mit der Strüktur aus der XSD gemein hat.
Viele Grüße
Bigeddie