2017-01-11 6 views
0

하나의 메시지가 여러 항목을 구성 할 때 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 데이터를 만들려고 할 때

<?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> 

은 BizTalk 내 XML을 좋아하지 않는다 유효하지 않은 자식 요소를 말하고, 내 두 번째 항목에 구불 구불 한 선을했다.

enter image description here

는 누군가가 내 데이터에 어떤 문제가 있는지 지적 할 수 있습니까? 순서대로 항목의 수를 기본적으로

<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> 

답변

0

당신은 무제한의 또는 당신이 당신의 Envelope 요소에 기대하는 항목의 정확한 숫자로 maxOccurs를 지정해야 1입니다 (명확성을 위해 내가 제거한 주석) :

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

또 다른 제안은 : 당신이 Envelope 내부 Error 요소를 기대하는 경우, 더 좋은 방법은 <xs:Error/> 대신 <xs:any/> 지정하는 것입니다.

+0

maxOccurs를 지적 해 주셔서 감사합니다. 별난 경고를 내놓은 것도 놀랄 일이 아닙니다. 에 대한 나의 목표는 단지 ​​이 아니라 무엇이든 잘만 잡는 것입니다. 난 앞으로 오류 메시지가 아니라 거기에 아무것도 던질 수 있기를 바랍니다. 바라기를 이것은 좋은 습관에 위배되는 것이 아닙니다. – user1205746