我有一個模式:XML驗證 - 的ValidationEventHandler信息
<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>
,簡單的XML文件(這是唯一的例子):
<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>
我使用ValidationEventHandler
,但我需要的代碼這對於客戶有什麼錯誤有明確的信息。例如對於只有4個長度的國家,我會得到字段「國家」長度小於MinValue的錯誤。
但我想給客戶端的信息是什麼意思「MinValue」,所以這個例子「5」。
我一直在尋找這個很長時間,但我找不到這個。
你知道我該怎麼做嗎?
現在我有這樣的代碼:
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++;
}
,所以你需要把一個驗證說明如果應該顯示的國家小於最小值,請輸入大於長度5的字符串? –
但國家只是例子。會有很多其他領域。 我需要顯示:「字段」國家「的長度小於MinValue = 5!請糾正此問題!」 – xThauron
確切地告訴你想達到什麼? –