Недопустимый дочерний элемент

Я пытаюсь провести эксперимент с конвертом в BizTalk 2010, когда одно сообщение будет состоять из нескольких элементов. У меня есть схема для конверта следующим образом:

Конверт:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://TestFromMSDN" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://TestFromMSDN" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:appinfo>
      <b:schemaInfo is_envelope="yes" />
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="Envelope">
    <xs:annotation>
      <xs:appinfo>
        <b:recordInfo body_xpath="/*[local-name()='Envelope' and namespace-uri()='http://TestFromMSDN']" />
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:any />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Схема для отдельного элемента выглядит следующим образом. Каждый конверт может содержать несколько предметов.

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://TestFromMSDN" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" elementFormDefault="qualified" targetNamespace="http://TestFromMSDN" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Error">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:int" />
        <xs:element name="Type" type="xs:int" />
        <xs:element name="Priority" type="xs:string" />
        <xs:element name="Description" type="xs:string" />
        <xs:element name="ErrorDateTime" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Когда я попытался создать свои XML-данные, BizTalk не понравился мой XML-файл, и на втором элементе была волнистая линия со словами недопустимый дочерний элемент.

введите описание изображения здесь

Может кто-нибудь указать, что не так в моих данных?

<ns0:Envelope xmlns:ns0="http://TestFromMSDN">
  <ns0:Error>
    <ns0:ID>102</ns0:ID>
    <ns0:Type>0</ns0:Type>
    <ns0:Priority>High</ns0:Priority>
    <ns0:Description>Sproket query fails</ns0:Description>
    <ns0:ErrorDateTime>1999-05-31T13:20:00.000-05:00</ns0:ErrorDateTime>
  </ns0:Error>
  <ns0:Error>
    <ID>16502</ID>
    <Type>2</Type>
    <Priority>Low</Priority>
    <Description>Time threshold exceeded</Description>
    <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
  </ns0:Error>
</ns0:Envelope>

1 ответ

Решение

По умолчанию количество элементов в последовательности равно 1. Вы должны указать maxOccurs быть неограниченным или точное количество предметов, которые вы ожидаете на вашем Envelope элемент (я удалил аннотацию для ясности):

<xs:element name="Envelope">
  <xs:complexType>
    <xs:sequence maxOccurs="unbounded">
      <xs:any />
    </xs:sequence>
  </xs:complexType>
</xs:element>

Еще одно предложение: если вы ожидаете только Error элементы внутри EnvelopeЛучшая практика заключается в определении <xs:Error/>вместо <xs:any/>,

Другие вопросы по тегам