2009-10-22 3 views
0

나는 예를 들면 다음과 같습니다 메시지를 가지고 있지만, 그 안에 포함 된 많은 송장을 할 수 :BizTalk의 XPath는 연결된 문자열 값을 반환합니다. 요소를 원하는 값

<ns1:InvoicesEnvelope xmlns:ns1="http://Test.Schemas.InvoiceEnvelope_1"xmlns:ns0="http://Test.Schemas.Invoices"> 
<Invoices> 
<ns0:Invoice> 
<Header> 
    <BatchID>1311</BatchID> 
    <InvoiceNo>3400055151</InvoiceNo> 
    <CustomerName>CUSNAME1</CustomerName> 
    <TotalInvoiceLines>2</TotalInvoiceLines> 
</Header> 
    <Lines> 
     <Line> 
      <TaxCode>S15</TaxCode> 
      <InvoiceAmt>12.77</InvoiceAmt> 
     </Line> 
     <Line> 
      <TaxCode>S15</TaxCode> 
      <InvoiceAmt>1.92</InvoiceAmt> 
     </Line> 
    </Lines> 
</ns0:Invoice> 
<ns0:Invoice> 
<Header> 
    <BatchID>1311</BatchID> 
    <InvoiceNo>3400055152</InvoiceNo> 
    <CustomerName>CUSNAME2</CustomerName> 
    <TotalInvoiceLines>2</TotalInvoiceLines> 
</Header> 
    <Lines> 
     <Line> 
      <TaxCode>S15</TaxCode> 
      <InvoiceAmt>12.77</InvoiceAmt> 
     </Line> 
     <Line> 
      <TaxCode>S15</TaxCode> 
      <InvoiceAmt>1.92</InvoiceAmt> 
     </Line> 
    </Lines> 
</ns0:Invoice> 
</Invoices> 
</ns1:InvoicesEnvelope> 

내가 XPath를 사용하여 원래 메시지에서 2 송장을받을되고 싶은 모든

: 그것은 비록 반환하는 실제 문자열 값과 같이 서로 연결됩니다 모든

msgInvoice = xpath(msgInvoicesEnvelope, "string (//ns1:InvoicesEnvelope/Invoices/ns0:Invoice[position() = 2])”); 

: 여기

내 XPath는이다
13113400055152CUSNAME22S1512.77S151.92 

필자가 원하는 것은 요소 태그이기도하므로 새로운 단일 송장 메시지에 넣을 수 있습니다. 이것은 내가 기대하는 것입니다 :

<ns0:Invoice> 
<Header> 
    <BatchID>1311</BatchID> 
    <InvoiceNo>3400055152</InvoiceNo> 
    <CustomerName>CUSNAME2</CustomerName> 
    <TotalInvoiceLines>2</TotalInvoiceLines> 
</Header> 
    <Lines> 
     <Line> 
      <TaxCode>S15</TaxCode> 
      <InvoiceAmt>12.77</InvoiceAmt> 
     </Line> 
     <Line> 
      <TaxCode>S15</TaxCode> 
      <InvoiceAmt>1.92</InvoiceAmt> 
     </Line> 
    </Lines> 
</ns0:Invoice> 
</Invoices> 

내가 뭘 잘못하고 있니?

답변

0

XPath가 맞습니다. 귀하의 문제는 XML 데이터를 요청하는 것일 수 있습니다.

예를 들어 C#에서 XPath를 실행하고 .InnerText 속성을 요청하면 동일한 결과를 얻습니다. 하지만 그 결과를 XmlElement으로 받아 들인다면 올바르게 처리 할 수 ​​있습니다.

HTH

1

나는이 문제에 대한 해결책을 찾았습니다. 그것은 매우 간단했습니다.

사용되는 XPath 표현식과 관련이 있습니다. 대신

msgInvoice = xpath(msgInvoicesEnvelope, "string (//ns1:InvoicesEnvelope/Invoices/ns0:Invoice[position() = 2])”); 

자신의 요소를 반환과 함께 문자열 값을 생략 말하는

.

msgInvoice = xpath(msgInvoicesEnvelope, "//ns1:InvoicesEnvelope/Invoices/ns0:Invoice[position() = 2]”);