Ich schaue auf etwas, XML zu validieren, wir werden gegen die XSD dafür gesendet. Ich bin auf diese drei gestoßen, aber nur einer scheint "zu arbeiten". Ich vermute, es gibt einen Grund für eine Markierung und ein Problem, wo andere nicht fragen, was die beste Methode ist und den Unterschied, abgesehen von der Art und Weise ist gemacht, mit diesen drei.Verschiedene Arten der XML-Validierung
XML
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<Forename>John</Forename>
</Person>
XSD
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" version="0.2">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:element name ="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Forename" type="xs:string"/>
<xs:element name="Surname" type="xs:string"/>
<xs:element name="Middlename" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Die erste Fahne ist ein Fehler, dass der Name Element erwartet wird, ist aber in der XML nicht, die ich erwarten würde.
class XPathValidation
{
static void Main()
{
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(@"C:\test\test.xsd"));
XDocument doc = XDocument.Load(@"C:\test\test.xml");
Console.WriteLine("Validating doc1");
bool errors = false;
doc.Validate(schemas, (o, e) =>
{
Console.WriteLine("{0}", e.Message);
errors = true;
});
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");
Console.ReadKey();
}
}
Diese zwei beide nur laufen und nichts zurück.
class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add("http://www.w3.org/2001/XMLSchema", @"C:\test\test.xsd");
booksSettings.ValidationType = ValidationType.Schema;
booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);
XmlReader books = XmlReader.Create(@"C:\test\test.xml", booksSettings);
while (books.Read()) { }
Console.ReadKey();
}
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);
}
}
}
und
class XPathValidation
{
static void Main()
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", @"C:\test\test.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(@"C:\test\test.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
// the following call to Validate succeeds.
document.Validate(eventHandler);
// the document will now fail to successfully validate
document.Validate(eventHandler);
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}", e.Message);
break;
}
}
}
danke für die Info, das Lernen noch alles.
Sie können XML in VS überprüfen. Im Menü Projekt: Neues Element hinzufügen: XML-Datei. Fügen Sie XML in das Fenster ein. Im Menü Projekt: Neues Element hinzufügen: XML-Schema. Fügen Sie das Schema im Fenster ein. Wählen Sie dann im Haupt-VS-Fenster XML: Schemas: Suchen Sie nach dem Schema, das Sie hinzugefügt haben, und fügen Sie dann in der linken Spalte das Häkchen hinzu. Dann drücken Sie OK. Gehen Sie zu Ihrem sml Tab und der Fehler wird angezeigt. Es sieht so aus, als hätte Person unvollständigen Inhalt. – jdweng