Ich habe ein Schema:XML-Validierung mit XSD-Schema - Validation info
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Und einfach XML-Datei (es ist nur Beispiel):
<address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="address.xsd">
<name>John Smith</name>
<street>109 Abbey Close</street>
<city>Hayes</city>
<country>UK</country>
</address>
ich ValidationEventHandler
verwende, aber ich brauche, um Code Dies hat klare Informationen für den Kunden, was falsch ist. Zum Beispiel für Land, das nur 4 Länge hat, bekomme ich Fehler, dass Feld "Land" Länge weniger als MinValue hat.
Aber ich möchte Client-Informationen geben, was bedeutet "MinValue", so für dieses Beispiel "5".
Ich suchte das lange, aber ich konnte das nicht finden.
Haben Sie eine Idee, wie ich es tun kann?
Jetzt habe ich diesen Code:
public static bool Validate(Stream xml, Stream xsd)
{
ClearErrorMessage();
try {
XmlTextReader tr = new XmlTextReader(xsd);
XmlSchemaSet schema = new XmlSchemaSet();
schema.Add(null, tr);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(schema);
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ErrorHandler);
XmlReader reader = XmlReader.Create(xml, settings);
while(reader.Read()) {
}
reader.Close();
if(numErrors > 0)
throw new Exception(msgError);
return true;
}
catch(Exception e) {
msgError = "Validation failed\r\n" + msgError + " " + e.Message;
return false;
}
}
private static void ErrorHandler(object sender, ValidationEventArgs args)
{
msgError = msgError + "\r\n" + args.Message + " " + args.Exception.LineNumber;
numErrors++;
}
so müssen Sie besagt eine Validierung setzen, wenn Land ist weniger als minimaler Wert thrn sollte es zeigen, bitte geben Sie eine Zeichenfolge größer als die Länge 5 ein? –
aber Land ist nur ein Beispiel. Es wird viele andere Felder geben. Ich brauche zeigen: "Feld" Land "hat weniger Länge als MinValue = 5! Bitte korrigieren Sie dies!" – xThauron
sagen Sie genau, was Sie erreichen möchten? –