2010-01-26 3 views
1

내 BizTalk 맵이 입력 XML에서 데이터를 올바르게 추출하지 못하는 상황이 있습니다.BizTalk Map이 입력 XML을 잘못 구문 분석 함

입력 스키마는 다음과 같습니다 : 최소 0이

시퀀스 XSD에 이러한 노드의

A 

    B 

모든 3, 최대 억제 할.

<A>1</A> 
<B>hi</B> 
<A>2</A> 
<B>there</B> 

지금 내지도가 테이블에 데이터를 삽입하기 위해 데이터와 통화를 저장 발동을 취

그래서 여기에 샘플 입력 파일 조각입니다. 1의 A와 2의 A 둘 다에 대해 필드 B에 대해 "안녕"을 표시합니다. 올바르지 않습니다.

나는이 문제를 추적했다. 생성 된 XSLT는 A에 대한 foreach를 수행 한 다음 값 B를 가져 오지만 항상 첫 번째 B를 가져옵니다.

이렇게하면 입력 스키마 또는 맵을 수정하여 올바르게 작동시키는 데 도움이되는 팁이 있습니까?

+0

이 질문은 오래된 것으로 알고 있지만 스키마는 "A B"로 렌더링 중입니다. 고칠 수 있겠 니? 또한 솔루션에 추가하십시오 (있는 경우). – 13ren

+0

설명에서 A와 B 요소가 모두 min/max {0, unbounded}이고 최소/최대 {0, 제한 없음}이있는 시퀀스 요소로 래핑됩니다. 대답으로, 나는이 세 부분 각각에 대해 명시적인 루프 펑 토이 드를 추가 할 수 있다고 생각합니다. 또는 AB pair가 항상있는 경우 (예 : 하나의 예와 같이) A와 B를 {1,1}로 설정하고 바깥쪽에 루프가 있습니다 (항상 쌍으로 있다고 가정). – 13ren

답변

2

당신이 그룹 A와 B 항목의 모임을해야하는 경우에는 스키마의 모습, 스키마는 래퍼 요소를 만드는 것입니다 변경할 수 있습니다 :

<xs:element name="wrapper"> 
    <xs:complextype> 
    <xs:sequence> 
     <xsl:element name="A" type="xs:string" minoccur="1" maxoccur="1"/> 
     <xsl:element name="B" type="xs:string" minoccur="1" maxoccur="1" /> 
    </xs:sequence> 
    </xs:complextype> 
</xs:element> 

그런 다음 수 래퍼 요소를 통해 루프 수 A와 B 요소. 그러나 그것이 당신이 찾고있는 것인지 확실하지 않습니다.

다른 옵션은 XSLT 호출 템플릿 내에서 작업하는 것입니다. A와 A의 현재 반복을 사용하면 B를 얻을 때 실제로 B [i]가됩니다. 여기서 i는 현재 반복입니다.

+0

큰 제안. 나는 그것을 시도 할 것이다. 나는 '래퍼'를 필요로하는지 궁금하다. 시퀀스 요소가 래퍼 역할을하지 않습니까? BizTalk에서는 A와 B에서 최소 0, 최대 레벨을 제한 한 다음 최소 1을 최대 1로 지정할 수 있습니다. 빠른 시도를하고 변환의 출력을 완전히 변경했습니다. – Krip

+0

정말 좋은 제안이고, 적어도 수정하거나 대답을 수락 할 수 있습니다. 너무 많은 사람들이 이미 대답을하고 실행합니다. – xcut

+0

xcut을 걱정하지 마십시오. 도망 가지 않습니다. 나는 확실히 신용이 만기가되는 신용을 줄 것이다. 나는 여전히 BizTalk 컨텍스트에서 이것을 해결하려고 노력하고 있으며, 그것은 나를 '그를 개조하는'기준입니다. 래퍼를 추가 할 수 없으며 나중에 변환을 수행하기 위해지도를 실행하는 대신 수정 된 스키마를 사용하여 입력 파일을 올바르게 구문 분석 할 수 없습니다. 왜냐하면 래퍼 요소를 추가하면 내가 찾고있는 '텍스트', 구분 된 문자 등을 표시해야하기 때문입니다.이 순간은 좋은 생각 인 반면 나에게 적합하지 않습니다. -Krip – Krip

관련 문제