2016-10-05 1 views
1

나는 사용자의 목록을 가지고 있고 그것은 단지 같은 나이이며, 같은 성을 가진 사용자를 보여줍니다 그래서를 필터링 할 - 아웃 원하는 넣어이위치 경로의 XSL 술어?

25, 스미스, 해리

(25), 스미스, 찰리

(36), 존스, 토마스

(36), 존스, 헨리

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="duplo.xsl"?> 
<report> 
    <user> 
     <age>25</age> 
     <name> 
      <lastName>Smith</lastName> 
      <firstName>Harry</firstName> 
     </name> 
    </user> 
     <user> 
     <age>25</age> 
     <name> 
      <lastName>Smith</lastName> 
      <firstName>Charlie</firstName> 
     </name> 
    </user> 
    <user> 
     <age>36</age> 
     <name> 
      <lastName>Jones</lastName> 
      <firstName>Thomas</firstName> 
     </name> 
    </user> 
    <user> 
     <age>36</age> 
     <name> 
      <lastName>Smith</lastName> 
      <firstName>Henry</firstName> 
     </name> 
    </user> 
    <user> 
     <age>36</age> 
     <name> 
      <lastName>Jones</lastName> 
      <firstName>Henry</firstName> 
     </name> 
    </user> 
    <user> 
     <age>47</age> 
     <name> 
      <lastName>Jones</lastName> 
      <firstName>Paul</firstName> 
     </name> 
    </user> 
    <user> 
     <age>47</age> 
     <name> 
      <lastName>Smith</lastName> 
      <firstName>Simon</firstName> 
     </name> 
    </user> 
</report> 

지금까지이 일에 온

ylesheet, 각 쌍의 두 번째 사람의 목록을 제공합니다.

(25), 스미스, 찰리

(36), 존스, 헨리

내 생각 엔 내가 [2]에 대한-각하지만, 지금까지 내가 발견하지 않은에서보다 더 영리한 뭔가를 작성해야한다는 것입니다 무엇을 대신 사용해야하는지. 어떤 아이디어?

<?xml version="1.0"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" indent="no"/> 

<xsl:key name="duplo" match="user" use="concat(age, '+', name/lastName)"/> 

<xsl:template match="/"> 
    <duplo> 

     <xsl:for-each select="//user[generate-id(.)=generate-id(key('duplo', concat(age, '+', name/lastName))[2])]"> 

      <xsl:sort select="age"/> 
      <xsl:sort select="name/lastName"/> 
      <xsl:sort select="name/firstName"/> 

       <user> 
        <age><xsl:value-of select="age"/></age> 
        <name> 
         <lastName><xsl:value-of select="name/lastName"/></lastName> 
         <firstName><xsl:value-of select="name/firstName"/></firstName> 
        </name> 
       </user> 
     </xsl:for-each> 
    </duplo> 

</xsl:template> 

</xsl:stylesheet> 
당신은 단지 내부 xsl:for-each 그냥 "초"를 따기보다는 그룹의 모든 항목을 얻을 필요가

답변

1

하나 ....

<xsl:for-each select="//user[generate-id(.)=generate-id(key('duplo', concat(age, '+', name/lastName))[2])]"> 
    <xsl:sort select="age"/> 
    <xsl:sort select="name/lastName"/> 
    <xsl:sort select="name/firstName"/> 
     <xsl:for-each select="key('duplo', concat(age, '+', name/lastName))"> 
     <user> 
      <age><xsl:value-of select="age"/></age> 
      <name> 
       <lastName><xsl:value-of select="name/lastName"/></lastName> 
       <firstName><xsl:value-of select="name/firstName"/></firstName> 
      </name> 
     </user> 
    </xsl:for-each> 
</xsl:for-each>