1

最初にマルチノードを選択し、日付で並べ替えたい。しかし、コードは完全には機能しません

XSLT

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/"> 
      <html>
      <body>
        <h2>display 9 Items</h2>
              <xsl:for-each select="groups/elements/category/types[@name='POP']/language | groups/elements[delivery]/category/types[@name='POP']/language">
            <xsl:sort select="ancsetor::elements[1]/PostDate" order="descending"/>
            <xsl:if test="not(position() > 9)">
            <b><xsl:value-of select="PostDate" /></b> - 
            <font color='red'><xsl:value-of select="name" /></font>
           <p></p>
           </xsl:if>
          </xsl:for-each>
      </body>
      </html>
    </xsl:template>

</xsl:stylesheet> 

XMLファイル

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="xslt.xslt"?>

<groups>
<elements>
<name>//1</name>
<BOD></BOD>
<description/>
<delivery/>
<URL></URL>
<Hobbbies>
<Sport></Sport>
<Music>
<category> 
<types Code="POP/DANCE" Name="POP"  />
<types Code="POP/MUSIC" Name="POP"  >
<language>Italian</language>
</types>
</category>
</Music>
</Hobbbies>
<Size></Size>
<PostDate>2012-03-04</PostDate>
<trackno></trackno>
</elements>
<elements>

<name>//1+1</name>
<BOD></BOD>
<description/>
<delivery/>yes
<URL></URL>
<Hobbbies>
<Sport></Sport>
<Music>
<category> 
<types Code="POP/DANCE" Name="POP"  />
<types Code="POP/MUSIC" Name="POP"  >
<language>Italian</language>
</types>
</category>
</Music>
</Hobbbies>
<Size></Size>
<PostDate>2012-03-04</PostDate>
<trackno></trackno>
</elements>



<elements>
<name>//2</name>
<BOD></BOD>
<description/>
<delivery/>
<URL></URL>
<Hobbbies>
<Sport></Sport>
<Music>
<category> 
<types Code="POP/DANCE" Name="PureMusic"  />
<types Code="POP/MUSIC" Name="JAZZ"  >
<language>No language</language>
</types>
</category>
</Music>
</Hobbbies>
<Size></Size>
<PostDate>2011-03-04</PostDate>
<trackno></trackno>
</elements>


<elements>
<name>//3</name>
<BOD></BOD>
<description/>
<delivery/>
<URL></URL>
<Hobbbies>
<Sport></Sport>
<Music>
<category> 
<types Code="JAZZ/DANCE" Name="JAZZ"  />
<types Code="JAZZ/MUSIC" Name="BLUES">
<language>English</language>
</types>
</category>
</Music>
</Hobbbies>
<Size></Size>
<PostDate>2012-05-04</PostDate>
<trackno></trackno>
</elements>


<elements>
<name>//4</name>
<BOD></BOD>
<description/>
<delivery/>yes
<URL></URL>
<Hobbbies>
<Sport></Sport>
<Music>
<category> 
<types Code="Blues/DANCE" Name="POP"  />
<types Code="Blues/MUSIC" Name="POP" >
 <language>No language</language>
</types>
</category>
</Music>
</Hobbbies>
<Size></Size>
<PostDate>2012-01-14</PostDate>
<trackno></trackno>
</elements>

</groups>
4

1 に答える 1

1

提供されたコードには、次のような最も明白なエラーがいくつかあります。

          <xsl:for-each select=
          "groups/elements/category/types[@name='POP']/language 
         | groups/elements[delivery]/category/types[@name='POP']/language"> 

types要素にはName属性があります-属性ではありませんname。XPathでは大文字と小文字が区別され、大文字と小文字が異なる名前は異なるものとして扱われます。

2番目の論理エラー

上記の和集合は、最初の引数と同等です。

groups/elements/category/types[@name='POP']/language 

2番目の引数(ノードセット)が最初の引数(ノードセット)に含まれているためです。

たぶん、2番目の引数での何かを指定したいですか?

3番目の明らかなエラーは、language要素にPostDateorという名前の子がないことです。nameしたがって、内部のコードはxsl:for-each何も生成しません。

4番目のエラーcategory、の子ではないということです。elementsしたがって、のselect属性はxsl:for-each単一のノードも選択しません。

解決策

上記のすべてのエラーが修正されたので、私の推測では、次のようなものが必要です。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
   <html>
      <body>
        <h2>display 9 Items</h2>
        <xsl:for-each select="groups/elements[.//category/types[@Name='POP']/language]">
            <xsl:sort select="PostDate" order="descending"/>
            <xsl:if test="not(position() > 9)">
            <b><xsl:value-of select="PostDate" /></b> -
            <font color='red'><xsl:value-of select="name" /></font>
           <p></p>
           </xsl:if>
        </xsl:for-each>
      </body>
   </html>
 </xsl:template>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合

<groups>
    <elements>
        <name>//1</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="POP"  />
                    <types Code="POP/MUSIC" Name="POP"  >
                        <language>Italian</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2012-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//1+1</name>
        <BOD></BOD>
        <description/>
        <delivery/>yes
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="POP"  />
                    <types Code="POP/MUSIC" Name="POP"  >
                        <language>Italian</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2012-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//2</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="PureMusic"  />
                    <types Code="POP/MUSIC" Name="JAZZ"  >
                        <language>No language</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2011-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//3</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="JAZZ/DANCE" Name="JAZZ"  />
                    <types Code="JAZZ/MUSIC" Name="BLUES">
                        <language>English</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2012-05-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//4</name>
        <BOD></BOD>
        <description/>
        <delivery/>yes
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="Blues/DANCE" Name="POP"  />
                    <types Code="Blues/MUSIC" Name="POP" >
                        <language>No language</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2012-01-14</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//5</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="DANCE/DANCE" Name="POP"  />
                    <types Code="RAP/MUSIC" Name="POP" >
                        <language>No language</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2010-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//6</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/HALL" Name="HALL"  />
                    <types Code="POP/MUSIC" Name="POP" >
                        <language>German</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2009-10-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//7</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="JAZZ/DANCE" Name="POP"  />
                    <types Code="BLUES/MUSIC" Name="POP"  >
                        <language>Korean</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2001-11-05</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//8</name>
        <BOD></BOD>
        <description/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="POP"  />
                    <types Code="POP/MUSIC" Name="POP"  >
                        <language>English</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2004-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//9</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="HIPHIP"  />
                    <types Code="POP/MUSIC" Name="POP" >
                        <language>Chinese</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2007-02-18</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//10</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="POP"  />
                    <types Code="POP/MUSIC" Name="POP" >
                        <language>Janpanese</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2002-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//11</name>
        <BOD></BOD>
        <description/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/JAZZ" Name="POP"  />
                    <types Code="POP/MUSIC" Name="JAZZ"  >
                        <language>Spanish</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2012-03-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//12</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="POP"  />
                    <types Code="POP/MUSIC" Name="POP">
                        <language>French</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2006-01-04</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//13</name>
        <BOD></BOD>
        <description/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="POP"  />
                    <types Code="POP/MUSIC" Name="POP" >
                        <language>English</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2012-05-02</PostDate>
        <trackno></trackno>
    </elements>
    <elements>
        <name>//14</name>
        <BOD></BOD>
        <description/>
        <delivery/>
        <URL></URL>
        <Hobbbies>
            <Sport></Sport>
            <Music>
                <category>
                    <types Code="POP/DANCE" Name="BB"  />
                    <types Code="POP/MUSIC" Name="DANCE"  >
                        <language>Spanish</language>
                    </types>
                </category>
            </Music>
        </Hobbbies>
        <Size></Size>
        <PostDate>2002-06-10</PostDate>
        <trackno></trackno>
    </elements>
</groups>

結果は

<html>
   <body>
      <h2>display 9 Items</h2><b>2012-05-02</b> -
      <font color="red">//13</font><p></p><b>2012-03-04</b> -
      <font color="red">//1</font><p></p><b>2012-03-04</b> -
      <font color="red">//1+1</font><p></p><b>2012-01-14</b> -
      <font color="red">//4</font><p></p><b>2010-03-04</b> -
      <font color="red">//5</font><p></p><b>2009-10-04</b> -
      <font color="red">//6</font><p></p><b>2007-02-18</b> -
      <font color="red">//9</font><p></p><b>2006-01-04</b> -
      <font color="red">//12</font><p></p><b>2004-03-04</b> -
      <font color="red">//8</font><p></p>
   </body>
</html>

そしてそれはブラウザに次のように表示されます

9アイテムを表示

2012-05-02 -// 13

2012-03-04 -//1

2012-03-04 -// 1 + 1

2012-01-14 -// 4

2010-03-04 -//5

2009-10-04 -//6

2007-02-18 -// 9

2006-01-04 -//12

2004-03-04 -//8

于 2012-09-11T12:19:54.300 に答える