我需要找到一组价格的最后一次出现(总计)。 这些价格总是带有小数(。)
它们的文本值存储在节点中,它们被发现为最后一次出现的3个节点,它们都包含'。'。
示例XML:
<?xml version="1.0" encoding="UTF-16"?>
<?xml-stylesheet type="text/xsl" href="XSLT.xsl"?>
<document xmlns="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<part1>
<prices>
<wd>3.1</wd>
<wd>56.4</wd>
<wd>134.4</wd>
</prices>
<prices2>
<wd>1,330.2</wd>
<wd>23.14</wd>
<wd>124.7</wd>
</prices2>
</part1>
</document>
我寻找最后一组的尝试如下。但是我无法将其编译,而是单独工作。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:variable name="LastGroup" select="//ss:wd[(contains(.,'.') and (following::ss:wd[contains(.,'.')]) and (following::ss:wd[contains(.,'.')][2])][last()]"/>
<xsl:for-each select="$LastGroup">
<xsl:value-of select="."/>
<xsl:value-of select="following::ss:wd"/>
<xsl:value-of select="following::ss:wd[2]"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我正在使用XSLT 1.0
答案 0 :(得分:1)
如果您想严格遵循您所描述的算法,可以将变量声明为:
<xsl:variable name="LastGroup"
select="(//ss:wd[contains(.,'.') and contains(following::ss:wd[1],'.') and contains(following::ss:wd[2],'.')])[last()]"/>
请注意,对于大文件来说这会很慢,尤其是因为您使用的是following::
轴。如果这三个元素始终嵌入在示例中显示的同一父级中,则将following::
替换为following-sibling::
可以提高性能......用更具选择性的内容替换//ss:wd
也应该有所帮助。