1

任意の XML 形式から HTML に変換しているとしましょう。大陸の名前を、人口の数 (国は 2 つの大陸にまたがる) の名前で並べ替えたいと考えています。

私は(先生からの制約)しか使えません:

decimal-format,output, template, sort, variable, for-each, value-of, format

そのため、「xsl:for-each-group」は使用できません。

以下は、私が取り組んでいるサンプルの XML 構造です。

<monde>
   <pays superficie="647500" code="AFG" capital="cty-Afghanistan-Kabul" continent="asia">
      <nom>Afghanistan</nom>
      <population>22664136</population>
      <frontieres>
         <frontiere codePays="TJ" longueur="76"/>
         <frontiere codePays="IR" longueur="936"/>
         <frontiere codePays="PK" longueur="2430"/>
         <frontiere codePays="TAD" longueur="1206"/>
         <frontiere codePays="TM" longueur="744"/>
         <frontiere codePays="UZB" longueur="137"/>
      </frontieres>
      <religions>
         <religion pourcentage="99">Muslim</religion>
      </religions>
      <villes>
         <ville>
            <nom>Kabul</nom>
            <population>892000</population>
         </ville>
      </villes>
   </pays>
   <pays superficie="28750" code="AL" capital="cty-cid-cia-Albania-Tirane"
         continent="europe"> ...

また、一部の国は 2 つの大陸にまたがっています。

<pays superficie="780580" code="TR" ...
         continent="europe asia">
...

必要な出力の例

<table>
 <tr>
    <td>africa</td><td>667 586 143</td>
    <td>america</td><td>784 256 501</td>
    <td>asia</td><td>3 231 410 618</td>
    <td>australia</td><td>29 765 885</td>
    <td>europe</td><td>580 580 439</td>
 </tr>
</table

これをエレガントな方法で解決するにはどうすればよいですか?

4

1 に答える 1

0

このソリューションがどれほどエレガントかはわかりませんが、探している出力が得られ、制限されている要素のみが使用されます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="monde">
    <table>
      <tr>
        <td>Africa</td>
        <td>
          <xsl:value-of select="sum(pays[contains(@continent,'africa')]/population)" />
        </td>
        <td>America</td>
        <td>
          <xsl:value-of select="sum(pays[contains(@continent,'america')]/population)" />
        </td>
        <td>Asia</td>
        <td>
          <xsl:value-of select="sum(pays[contains(@continent,'asia')]/population)" />
        </td>
        <td>Australia</td>
        <td>
          <xsl:value-of select="sum(pays[contains(@continent,'australia')]/population)" />
        </td>
        <td>Europe</td>
        <td>
          <xsl:value-of select="sum(pays[contains(@continent,'europe')]/population)" />
        </td>
      </tr>
    </table>
  </xsl:template>
</xsl:stylesheet>

これが行うことは、述語を使用して、合計したい大陸の名前が値に含まpopulationれる各国のみを合計することです。continentしたがって、複数の大陸がリストされている場合、これは同じ人口を複数回カウントします。

于 2013-10-30T13:27:41.590 に答える