【发布时间】:2017-08-11 01:42:39
【问题描述】:
我有一个架构:
<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++;
}
【问题讨论】:
-
因此您需要进行验证,说明如果国家/地区小于最小值 thrn,则应显示请输入长度大于 5 的字符串?
-
但国家只是示例。还会有很多其他领域。我需要显示:“字段“国家”的长度小于 MinValue = 5!请更正!”
-
准确说出你想要达到的目标?
-
使用架构验证 XML,如果存在验证错误,我希望在反馈中返回正确且清晰的信息。因此,当 XML 中有长度为 4 的国家/地区时,我想显示客户端,它必须长于 4
-
你在为此写java代码吗?
标签: xml validation c#-4.0 xsd schema