2017-10-13 4 views
1

私はこの作業に大きな問題があり、ソートの仕方を理解することはできません。XSLT外部文書の情報で表をソートする

XSLTで.XSLをインポートするテーブルをソートしようとしています。この.XSLには、2つの外部.XSLが参照されています。出力はHTMLでなければなりません。

mainXSL.xsl

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" media-type="image/svg" indent="yes" encoding="UTF-8"/> 

       <xsl:variable name="fileA" select="document(/importFiles/docs/@fileA)" /> 
       <xsl:variable name="fileB" select="document(/importFiles/docs/@fileB)" /> 
    <xsl:template match="/"> 
     <html> 
      <head> 
       <title> 
        Task1 
       </title> 
      </head>   
       <body> 
        <table align="center" border="1"> 
         <tr> 
          <th>column_1</th> 
          <th>column_2</th> 
         </tr> 

         <xsl:for-each select="$fileA/letters/letter"> 
          <xsl:sort select="." order="ascending"/> 
           <xsl:variable name="current_node" select="position()"/> 
            <tr>         
             <td class="_fileA"><xsl:value-of select="." /></td> 
             <td class="_fileB"><xsl:value-of select="$fileB//animal[$current_node]" /></td> 
            </tr> 
          </xsl:for-each> 
        </body> 
       </html> 
</xsl:template> 

INDEX.XML

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="mainXSL.xsl"?> 

<importFiles> 
    <docs fileA = "fileA.xml" /> 
    <docs fileB = "fileB.xml" /> 
</importFiles> 

fileA.xml

<?xml version="1.0" encoding="UTF-8"?> 

     <letters> 
      <letter>A</letter> 
      <letter>C</letter> 
      <letter>B</letter> 
      <letter>E</letter> 
      <letter>D</letter> 
     </letters> 

fileB.xml

<?xml version="1.0" encoding="UTF-8"?> 

     <animals> 
      <animal>dog</animal> 
      <animal>horse</animal> 
      <animal>cow</animal> 
      <animal>snake</animal> 
      <animal>spider</animal> 
     </animals> 

だからfileA.xml内の文字は、私は今、何を得るfileB.xml

の同じ行上の動物に貼られた表である。

A - 犬

B - 馬

C - 牛

D - 蛇

E - クモ

は何私が取得したいことは次のとおりです。

A - 犬

B - 牛

C - 馬

D - クモ

E - 蛇

私ができますfor-eachループの後に、列を一緒に並べ替える方法を見つけ出します(column_1のみ)。 同様の問題をここで見つけようとしましたが、無駄です。 前に同様の質問を投稿して正解を得ましたが、数字を手紙に編集するのを忘れました。数値を指定すると、position()を使用すると簡単になります。この場合、position()はインデックスとして使用できますが、それは長い時間です。私はこれにはもっと簡単な解決策があると思います。

答えて

2

変更

<xsl:variable name="current_node" select="position()"/> 

<xsl:variable name="orig-pos"><xsl:number/></xsl:variable> 

にして、

<xsl:value-of select="$fileB//animal[position() = $orig-pos]" /> 
+0

あなた卿を使用し、真の救世主です!とても感謝しております! –

関連する問題