2015-05-09 61 views
-1

我有一個XML文檔,我試圖選擇具有不同值的節點,並刪除了前導空格和尾隨空格。Xpath獲取具有不同值的節點(刪除尾隨和前導空格)

我使用以下Xpath和它工作:

ROW[COUNTRY[not(text() = following::ROW/COUNTRY[text()])]] 

但是,當我在上面xpath使用normalize-space(text())然後返回的結果是不正確的。

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
    <ROW> 
     <COUNTRY> 
      <![CDATA[USA]]> 
     </COUNTRY> 
     </ROW> 
    <ROW> 
     <COUNTRY> 
      <![CDATA[ USA]]> 
     </COUNTRY> 
    </ROW> 
</ROOT> 

XSLT:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" indent="yes" /> 
    <xsl:template match="@*|node()"> 
    <xsl:apply-templates select="@*|node()" /> 
    </xsl:template> 

    <xsl:template match="ROW[COUNTRY[not(normalize-space(text()) = following::ROW/COUNTRY[normalize-space(text())])]]"> 
    <tr> 
     <xsl:value-of select="normalize-space(./COUNTRY)"></xsl:value-of> 
    </tr> 
    </xsl:template> 
</xsl:transform> 
+0

你應該包括在這個實際中使用的XML和XSL問題,而不是鏈接到它。如果鏈接停止運行,這將使這個問題和答案在未來更有價值。 –

回答

3

使用Muenchian分組的:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" indent="yes" /> 

    <xsl:key name="group" match="ROW" use="normalize-space(COUNTRY)"/> 

    <xsl:template match="@*|node()"> 
    <xsl:apply-templates select="@*|node()" /> 
    </xsl:template> 

    <xsl:template match="ROW[generate-id() = generate-id(key('group', normalize-space(COUNTRY))[1])]"> 
    <tr> 
     <xsl:value-of select="normalize-space(./COUNTRY)"></xsl:value-of> 
    </tr> 
    </xsl:template> 
</xsl:transform> 
相關問題