2009-10-22 8 views
0

J'ai un message qui ressemble à ceci par exemple, mais aurait beaucoup plus de factures qu'il contient:XPath dans BizTalk renvoie des valeurs de chaîne concaténées. Voulez-vous des éléments et des valeurs

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

Tout ce que je veux faire est d'obtenir la 2ème facture du message d'origine en utilisant XPath

Voici mon Xpath:

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

Tout ce qu'il retourne bien sont les valeurs de chaîne réelle concaténés comme ceci:

13113400055152CUSNAME22S1512.77S151.92 

Ce que je veux, c'est aussi les balises d'éléments, afin qu'elles puissent être placées dans un nouveau message de facture unique. Voici ce que je m'attends à obtenir:

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

Qu'est-ce que je fais de mal?

Répondre

0

Votre XPath a raison; votre problème est probablement la façon dont vous demandez des données XML; Par exemple, en C#, si je lance votre XPath et demande la propriété .InnerText, j'obtiendrai le même résultat faux; mais, si je prends ce résultat en tant que XmlElement je peux le gérer correctement.

HTH

1

J'ai trouvé la solution au problème. C'était très simple.

Il concerne l'expression XPath utilisée.

Au lieu de dire

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

omettez la chaîne et les valeurs ainsi que leurs éléments sont retournés.

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