С ниже XML, я хочу, чтобы принимать значения в каждом DESC элемент, извлечь только значение перед INV и добавить их все и напечатать сумму на новый элемент под названием " Всего". Другими словами, если элемент содержит:XSL - сумма значений п
<DESC>TEST SUPPLIER 1 250600FOO 805415446355485 000000002000.00INV 1234</DESC>
Тогда я только хочу, чтобы извлечь:
000000002000.00
и сделать это для всех DESC элементов, сложите их вместе и выводить его на элемент под названием Всего. Элемент DESC может появляться n раз. Ниже приведен XML с тремя вхождений:
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<FOO>OW00007838</FOO>
<BAR>1</BAR>
<DESC>TEST SUPPLIER 1 250600FOO 805415446355485 000000002000.00INV 1234</DESC>
<FOO>OW00007838</FOO>
<BAR>2</BAR>
<DESC>TEST SUPPLIER 2 050712ACME 000256886355485 000000023020.35INV 65870</DESC>
<FOO>OW00007838</FOO>
<BAR>4</BAR>
<DESC>TEST SUPPLIER 3 050712ABCD 000000698745987 000000049158.68INV 02155</DESC>
</root>
А вот мой незаконченный таблицы стилей - Я использую подстроку, чтобы попытаться извлечь значение, но не уверен, что это эффективно. Думал использовать комбинацию подстроки-до и -после вместо:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:exsl="http://exslt.org/common">
<xsl:output indent="yes"/>
<xsl:template match="/">
<Total>
<xsl:variable name="subTotals">
<xsl:for-each select="/root/DESC">
<number>
<xsl:value-of select="substring(.,86,16)"/>
</number>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum(exsl:node-set($subTotals)/number)"/>
</Total>
</xsl:template>
В настоящее время выход только возвращает 0.
Сначала вы будете хотеть это - ' '. Можете ли вы использовать XSLT 2.0, поскольку у него есть намного лучшие способы сделать это? –
samjudson
Да, я могу использовать XSLT 2.0 вместо – Scrat
Спасибо за отзыв - отредактировал оригинальный пост. – Scrat