我是一个标准的Schema格式,如下所示
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://HR_XML_BizTalk_Project_Schemas.Schema1" targetNamespace="http://HR_XML_BizTalk_Project_Schemas.Schema1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="UserDetails">
<xs:complexType>
<xs:sequence>
<xs:element name="Any">
<xs:complexType />
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但我的合作伙伴以下面的格式发送xml。
<ns0:Root xmlns:ns0="http://HR_XML_BizTalk_Project_Schemas.Schema1">
<UserDetails>
<ID>ID_0</ID>
<Name>Name_0</Name>
<Account>Account_0</Account>
<Amount>Amount_0</Amount>
</UserDetails>
</ns0:Root>
我收到错误“元素'UserDetails'具有无效的子元素'ID'。预期的可能元素列表:'Any'”
根据我的理解,我必须告诉我的合作伙伴不要在UserDetails Record下发送任何数据。
否则,我必须删除节点,如果在验证之前在UserDetails记录下存在任何内容。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
<xs:element name="Any">
查找名为Any
的元素
如果可能是任何元素,你的意思是什么:
<xs:any>
答案 1 :(得分:1)
您是否真的打算为Any
的内容要求名为UserDetails
的元素?
如果您希望允许UserDetails
下的任何元素序列,请将您的XSD更改为以下内容:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003"
xmlns="http://HR_XML_BizTalk_Project_Schemas.Schema1"
targetNamespace="http://HR_XML_BizTalk_Project_Schemas.Schema1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="UserDetails">
<xs:complexType>
<xs:sequence>
<xs:any maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
然后您的合作伙伴的XML将有效。
但是,请注意,使用xsd:any
时,您无法很好地传达界面要求。最好是陈述服务的实际要求,除非你真的不在乎UserDetails
下的内容。
答案 2 :(得分:0)
如果我正确理解了你的XSD,那么它需要XML:
<ns0:Root xmlns:ns0="http://HR_XML_BizTalk_Project_Schemas.Schema1">
<UserDetails>
<Any></Any>
</UserDetails>
</ns0:Root>
我不确定您要检查什么,但您的验证器似乎行为正确。请解释一下你想做什么,并确保sombody能够帮助你。