2015-05-09 1 views
-1

У меня есть документ XML, в котором я пытаюсь выбрать узлы с различными значениями с удалением ведущих и конечных пробелов.Xpath, чтобы получить узлы с различными значениями (удаление конечных и ведущих пробелов)

Я использую следующие Xpath и она работает:

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

Но когда я использую normalize-space(text()) в выше xpath то возвращаемые результаты не являются правильными.

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> 
Смежные вопросы