У нас есть XML-документ со счетами / Invoice / [asst.elements], используя шаблон вызова xslt, нам нужно сложить InvoiceAmounts для сопоставления InvoiceNumbers.
Входной xml-файл:
<Invoices>
<Invoice>
<InvoiceNumber>351510</InvoiceNumber>
<InvoiceAmount>137.50</InvoiceAmount>
</Invoice>
<Invoice>
<InvoiceNumber>351510</InvoiceNumber>
<InvoiceAmount>362.50</InvoiceAmount>
</Invoice>
<Invoice>
<InvoiceNumber>351511</InvoiceNumber>
<InvoiceAmount>239.50</InvoiceAmount>
</Invoice>
</Invoices>
Я нашел оператор выбора, который возвращает общую сумму InvoiceAmounts длявесь документ, но необходимо отфильтровать его до суммы, основанной на InvoiceNumber, поскольку в документе Invoices может быть несколько счетов с одним и тем же InvoiceNumber.
Возвращает общую сумму:
<xsl:value-of select="sum(/*[local-name()='Invoices']/*[local-name()='Invoice']/*[local-name()='InvoiceAmount'])" />
Согласно моим исследованиям, этот запрос ниже должен фильтровать результаты по одному InvoiceNumber, но это не так.Таким образом, мы добавили параметр в этот шаблон, p1, и отформатировали запрос ниже.Есть ли другой способ отформатировать этот выбор, чтобы получить общее количество только для тех InvoiceNumbers = $ p1?Перепробовав много вариантов этого, все еще не могу получить ожидаемые результаты.Есть ли способ добавить переменную $ p1 в выборку для фильтрации результатов?
<xsl:value-of select="sum(/*[local-name()='Invoices']/*[local-name()='Invoice'][local-name()='InvoiceAmount' = $p1]/*[local-name()='InvoiceAmount'])" />
Ожидаемые результаты:
<Invoices>
<Invoice>
<InvoiceNumber>351510</InvoiceNumber>
<InvoiceAmount>500.00</InvoiceAmount>
</Invoice>
<Invoice>
<InvoiceNumber>351510</InvoiceNumber>
<InvoiceAmount>500.00</InvoiceAmount>
</Invoice>
<Invoice>
<InvoiceNumber>351511</InvoiceNumber>
<InvoiceAmount>239.50</InvoiceAmount>
</Invoice>
</Invoices>
Спасибо за внимание.Том