2014-01-15 64 views
0

我需要查找一組價格(總數)的最後一次出現。 這些價格將始終有一個小數點(。)選擇一組節點的最後一次出現XSLT

它們的文本值存儲在節點中,並且它們被作爲發現的最後一個出現的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

回答

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替換爲更具選擇性的元素也應該有所幫助。

相關問題