【问题标题】:Xml Validation Issue with unexpected list of elements带有意外元素列表的 Xml 验证问题
【发布时间】:2014-07-24 15:50:00
【问题描述】:

我是一个标准的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 记录下存在任何内容,我必须删除节点。

有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: c# xml xsd biztalk xml-validation


    【解决方案1】:
    <xs:element name="Any">
    

    这会寻找一个名为Any的元素 如果可能有任何元素,您的意思是什么:

    <xs:any>
    

    【讨论】:

      【解决方案2】:

      你真的打算为UserDetails 的内容需要一个名为Any 的元素吗?

      如果您希望允许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 下的内容,否则最好说明您的服务的实际要求。

      【讨论】:

        【解决方案3】:

        如果我正确理解您的 XSD,它会期望这样的 XML:

        <ns0:Root xmlns:ns0="http://HR_XML_BizTalk_Project_Schemas.Schema1">
          <UserDetails>
            <Any></Any>
          </UserDetails>
        </ns0:Root>
        

        我不确定您要检查什么,但您的验证器似乎表现正确。请说明您究竟想做什么,并且肯定会有人帮助您。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-18
          • 1970-01-01
          • 1970-01-01
          • 2021-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多