2015-09-04 6 views
0

У меня проблема с XSLT. Я хотел бы суммировать все промежуточные суммы, когда номер счета НЕ начинается с буквы «М». Проблема в том, что я использую функцию СУММ, но я не знаю, как это сделать.(XSLT) Как суммировать значения на основе родственного узла

Я использовал конструкции IF в прошлом, но они были использованы для создания строки типа «456 + 415», и мне нужно одно суммированное число.

Вот XML Я хочу перевести:

<PriceSheets> 
    <PriceSheet> 
     <SubTotal>456</SubTotal> 
     <Settlement> 
      <InvoiceNumber>M1234567890</InvoiceNumber> 
     </Settlement> 
    </PriceSheet> 
     <SubTotal>415</SubTotal> 
     <Settlement> 
      <InvoiceNumber>1234567891</InvoiceNumber> 
     </Settlement> 
    <PriceSheet> 
    </PriceSheet> 
</PriceSheets> 

В этом случае я ожидаю увидеть "415". Любая помощь будет принята с благодарностью!

Благодаря

PS: Я использовал для использования

<xsl:value-of select="sum(PriceSheets/PriceSheet/SubTotal/text())" /> 

просуммировать все значения, но проблема в том, что мне нужно посмотреть в узел расчетов/INVOICENUMBER, прежде чем я просуммировать значения.

+0

ответ

0

Ваш XML выглядит недействительным, но предполагая, что каждый PriceSheet имеет Settlment элемент и субтотальная элемент, то вы хотите:

<xsl:value-of 
    select="sum(PriceSheets/PriceSheet[substring(Settlement/InvoiceNumber, 1, 1)<>'M']/SubTotal/text())" /> 
0

Вы хотите выбрать все подытог где INVOICENUMBER Расчетный узел братий и сестер Безразлично» t начать с 'M':

<xsl:value-of select="sum(//SubTotal[substring(../Settlement/InvoiceNumber, 1, 1) != 'M'])" /> 
0

Спасибо всем за ваш ввод! Я использовал ваши примеры, чтобы получить рабочий код!

sum(PriceSheets/PriceSheet[substring(Settlement/InvoiceNumber/text(), 1, 1) != 'M']/SubTotal/text()) 

Я также экспериментировал с чем-то еще, что также работал:

<xsl:value-of select="sum(PriceSheets/PriceSheet[not(starts-with(Settlement/InvoiceNumber, 'M'))]/SubTotal/text())" /> 

Оба они работают для меня! Спасибо всем :)

+0

Вы можете немного упростить выражение, отбросив выражение 'text()' и используя 'start-with', чтобы проверить« M ». Попробуйте это ... '' –

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