Xml 有没有办法从字符串中提取数字,并使用XSLT计算其总和?
字符串,例如-Xml 有没有办法从字符串中提取数字,并使用XSLT计算其总和?,xml,xslt,Xml,Xslt,字符串,例如- 10 AL @ 6' X 32' ROOFTOP 5 AL @ 6' X 32' ROOFTOP 4 AL @ 6' X 32' ROOFTOP 6 AL @ 6' X 32' ROOFTOP 我需要提取AL之前的所有数字,并计算出总和 我尝试了,但得到了NaN作为输出 来自评论: <part_d> <description label="Description Part"&
10 AL @ 6' X 32' ROOFTOP
5 AL @ 6' X 32' ROOFTOP
4 AL @ 6' X 32' ROOFTOP
6 AL @ 6' X 32' ROOFTOP
我需要提取AL之前的所有数字,并计算出总和
我尝试了<part_d>
<description label="Description Part">1 RL @ 4' X 32'</description>
<description label="Description Part">10 RL @ 4' X 32'</description>
<description label="Description Part">5 RL @ 4' X 32'</description>
<description label="Description Part">8 RL @ 4' X 32'</description>
<description label="Description Part">9 RL @ 4' X 32'</description>
</part_d>
4'X 32'处1个RL
4'X 32'处10 RL
4'X 32'处5 RL
8 RL@4'X 32'
9 RL@4'X 32'
XSLT 1.0中的sum()函数只能对数字求和,不能进行计算。请尝试以下方法:
XSLT1.0(+EXSLT)
或者,如果您愿意:
XSLT
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="part_d">
<xsl:variable name="quantities">
<xsl:for-each select="description">
<q>
<xsl:value-of select="substring-before(., ' ')" />
</q>
</xsl:for-each>
</xsl:variable>
<total-quantity>
<xsl:value-of select="sum(exsl:node-set($quantities)/q)" />
</total-quantity>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="part_d">
<total-quantity>
<xsl:call-template name="add">
<xsl:with-param name="items" select="description"/>
</xsl:call-template>
</total-quantity>
</xsl:template>
<xsl:template name="add">
<xsl:param name="items" select="/.."/>
<xsl:param name="sum" select="0"/>
<xsl:choose>
<xsl:when test="$items">
<xsl:variable name="item" select="$items[1]" />
<xsl:variable name="n" select="substring-before($item, ' ')" />
<!-- recursive call -->
<xsl:call-template name="add">
<xsl:with-param name="items" select="$items[position() > 1]"/>
<xsl:with-param name="sum" select="$sum + $n"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
请详细解释您要从字符串样本中提取和求和的确切数字。通常,您使用哪个XSLT处理器,哪个XSLT版本?XSLT 2和3分别通过xsl:analyze string
或analyze string
提供正则表达式支持,可以轻松地分解该字符串,当然也可以然后对数字进行求和。很抱歉格式不正确。我使用的工具支持XSLT 1。实际字符串是10 AL@6'X 32'屋顶。所以我需要从AL之前的字符串中提取数字10。因为将有多个相同格式的字符串,所以我需要显示AL的总数。它实际上只是一个字符串吗,coveri你有多行?或者字符串都是分开的,每个都在一个不同的元素中?如果你显示字符串数据所包含的实际XML会有所帮助。谢谢!1 RL@4'X 32'10 RL@4'X 32'5 RL@4'X 32'8 RL@4'X 32'9 RL@4'X 32'@TimCPlease不要在注释中发布代码。编辑你的问题并将其添加到那里。谢谢这对我来说很有用@michael.hor257k.xslt1.0(+EXSLT)。