У меня есть сообщение, которое выглядит, например, так, но может содержать в себе гораздо больше счетов:
<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>
Все, что я хочу сделать, это получить 2-й счет из исходного сообщения, используя xpath
Вот мой Xpath:
msgInvoice = xpath(msgInvoicesEnvelope, "string (//ns1:InvoicesEnvelope/Invoices/ns0:Invoice[position() = 2])”);
Все, что он возвращает, это фактические строковые значения, соединенные вместе, вот так:
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>
Что я делаю не так?