2013-06-06 3 views
0

Мне нужно получить два итоговых значения CreditCardTotal и CashTotal и их отобразить в другом теге AccountCost, как показано ниже.XSLT/Xpath Как накопить/получить общее количество узла на основе состояния в другом узле

В принципе, мне нужно получить сумму расходов и проверить, является ли это кредитной картой или наличными, а затем добавить ее к соответствующей общей переменной. Или, если есть более элегантный способ, пожалуйста, дайте мне знать.

Я полностью в тупике и новичок в Xpath. Спасибо, и по достоинству оценят ваше время и усилия.

<ExpenseCatDetail> 
    <Expense>500</Expense> 
    <PaymentMethod>CreditCard</PaymentMethod> 
    <AccountCost>700</AccountCost> 
</ExpenseCatDetail> 

<ExpenseCatDetail>  
    <Expense>100</Expense> 
    <PaymentMethod>Cash</PaymentMethod> 
    <AccountCost>400</AccountCost> 
</ExpenseCatDetail> 

<ExpenseCatDetail> 
    <Expense>200</Expense> 
    <PaymentMethod>CreditCard</PaymentMethod> 
    <AccountCost>700</AccountCost> 
</ExpenseCatDetail> 

<ExpenseCatDetail> 
    <Expense>300</Expense> 
    <PaymentMethod>Cash</PaymentMethod> 
    <AccountCost>400</AccountCost> 
</ExpenseCatDetail> 

ответ

1

Создание элемента невозможно с помощью XPath, для этого вам потребуется XQuery.

Чтобы получать единовременную используйте

sum(//ExpenseCatDetail[PaymentMethod="Cash"]/AccountCost) 

и заменить "Cash" по мере необходимости.

Использование XPath 2.0, вы могли бы по крайней мере вычислить обе суммы в одном операторе и возвращают последовательность обоих значений (обычно отображается в виде массива или аналогичной конструкции в других языках программирования):

(
    sum(//ExpenseCatDetail[PaymentMethod="Cash"]/AccountCost), 
    sum(//ExpenseCatDetail[PaymentMethod="CreditCard"]/AccountCost) 
) 
+0

Спасибо Jens ERAT , Я попробую ваше предложение. – user2461078

+0

И какова будет функция для объединения значений строк? – Rachcha

+0

Используйте 'concat ($ string, $ string, ...)' для фиксированного (но произвольного) числа строк (без последовательностей), 'string-join ($ seq, $ seperator)' для последовательностей строк, которые конкатенируются с разделителем '$ seperator'. 'string-join' доступен только в XPath 2.0 (и выше),' concat' также может использоваться в XPath 1.0. –

Смежные вопросы