2014-07-24 7 views
0

I стандартный формат схемы как нижеXml Validation Проблема с неожиданным списком элементов

<?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“Список возможных элементов ожидаемых:. Любые»

По моему uderstanding, я должен сообщить моему партнеру, чтобы он не отправлял данные в UserDetails Record.
В противном случае, я должен удалить узлы, если что-то существующее в UserDetails запишет до проверки.

Есть ли другие возможности для решения этой проблемы?

ответ

2
<xs:element name="Any"> 

Этот взгляд для элемента с именем Any Что вы имеете в виду, если, возможно, какой-либо элемент:

<xs:any> 
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.

0

Если я правильно понял ваш XSD правильно ожидает XML так:

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

I я не уверен, что вы хотели бы проверить, но ваш валидатор, кажется, ведет себя правильно. Пожалуйста, объясните, что именно вы хотели бы сделать, и наверняка кто-то сможет вам помочь.

Смежные вопросы