我有以下Xml架构。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="type">
<xs:restriction base="xs:string">
<xs:enumeration value="Type 1" />
<xs:enumeration value="Type 2" />
<xs:enumeration value="Type 3" />
</xs:restriction>
</xs:simpleType>
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Element_1">
<xs:complexType>
<xs:sequence>
<xs:element name="TypeName" type="type" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Element_2">
<xs:complexType>
<xs:sequence>
<xs:element name="TypeName" type="type" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我正在根据上述模式验证以下xml。
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Element_1>
<TypeName>Type 4</TypeName>
</Element_1>
<Element_3>
<TypeName>Type 2</TypeName>
</Element_3>
</Root>
我预计会出现验证错误,但我得到了一个:"TypeName"元素无效-根据其数据类型"Type",值"Type 4"无效-枚举约束失败。元素"Root"具有无效的子元素"element_3"。需要的可能元素列表:"Element_2"
错误消息清楚地显示了无效元素(Element_3),还显示了可能的有效元素列表(Element_2)。是否可以显示"TypeName"的有效列表。
现在,我想要类似于下面的错误消息:"TypeName"元素无效-根据其数据类型"Type",值"Type 4"无效需要的可能值列表:"类型1,类型2"-枚举约束失败。元素"Root"具有无效的子元素"element_3"。需要的可能元素列表:"Element_2"
是否有可能得到上述错误消息(或类似消息)。除了xs:enumeration之外,是否还有其他限制显示所有有效值?
@Richard:谢谢你提供的信息。
找不到解决方案,但建立了一个解决方案。
private static void ValidationCallBack(object sender, ValidationEventArgs e)
{
if (e.Exception != null && e.Exception.InnerException != null)
{
if (e.Exception.InnerException.Message == "The Enumeration constraint failed.")
{
if (((XElement)sender).Name == "TypeName")
{
Console.WriteLine("Error, valid Enums are Type 1, Type 2, Type 3...");
}
}
}
else
{
Console.WriteLine("Error.");
}
}