1

XSLT 経由で XML データを Adob​​e InDesign にインポートしようとしています。今後 4 日間 (今日ではなく) の情報を入手したい。これまでのところ、明日の予測しか得られませんでしたが、4 日間を出力する方法がわかりません。テンプレートは、2 日目 (明日) と期間 2 (時刻) を選択します。

この形式の無料の気象データにアクセスできます: http://www.yr.no/place/Iceland/Capital_Region/Reykjavik/forecast.xml

これはテンプレートです:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" encoding="ISO-8859-1" indent="yes" omit-xml-declaration="no" cdata-section-elements=""/>
  <xsl:strip-space elements="*"/>

  <!--
  The position of the time[@period = '2'] element; indexing starts from 1.
  You can pass in this parameter to the transformation if you want the
  time[@period = '1'] element in some other position.
  -->
  <xsl:param name="time" select="2"/> <!-- This is the day -->
  <xsl:param name="base" select="'file:///Volumes/Media/Geymsla/ymis_verkefni/DV2013/sky/'"/>

  <xsl:template match="/">
    <yr>
      <testtag>
        <xsl:apply-templates select="weatherdata"/>
      </testtag>
    </yr>
  </xsl:template>

  <xsl:template match="weatherdata">
    <xsl:apply-templates select="location/name"/>
    <xsl:apply-templates select="links/link[@id = 'overview']"/>
    <base><xsl:value-of select="$base"/></base>
    <xsl:apply-templates select="meta/lastupdate"/>
    <!-- Apply the <time period="2"> element in $time position, the time of day -->
    <xsl:apply-templates select="forecast/tabular/time[@period = '2'][number($time)]"/>
  </xsl:template>

  <xsl:template match="tabular/time">
    <xsl:apply-templates select="symbol"/>
    <xsl:apply-templates select="precipitation"/>
    <xsl:apply-templates select="temperature"/>
    <xsl:apply-templates select="windSpeed"/>
    <xsl:apply-templates select="windDirection"/>

    <!--
    Use attribute value template (AVT) to construct the attribute value:
    http://lenzconsulting.com/how-xslt-works/#attribute_value_templates
    -->
    <Image href="{concat($base, symbol/@var, '.png')}"/>
  </xsl:template>

  <xsl:template match="location/name">
    <title>
      <xsl:value-of select="."/>
    </title>
  </xsl:template>

  <xsl:template match="links/link">
    <alternate>
      <!-- Use the value of the @url attribute of this element -->
      <xsl:value-of select="@url"/>
    </alternate>
  </xsl:template>

  <xsl:template match="temperature">
    <tempval>
      <xsl:value-of select="@value"/>
    </tempval>
  </xsl:template>

  <xsl:template match="windSpeed">
    <speedname>
      <xsl:value-of select="@name"/>
    </speedname>

    <speedmps>
      <xsl:value-of select="@mps"/>
    </speedmps>
  </xsl:template>

  <xsl:template match="windDirection">
    <dirdeg>
      <xsl:value-of select="@deg"/>
    </dirdeg>

    <dircode>
      <xsl:value-of select="@code"/>
    </dircode>

    <dirname>
      <xsl:value-of select="@name"/>
    </dirname>
  </xsl:template>

  <xsl:template match="precipitation">
    <precip>
      <xsl:value-of select="@value"/>
    </precip>
  </xsl:template>

  <xsl:template match="symbol">
    <symbolvar>
      <xsl:value-of select="@var"/>
    </symbolvar>

    <symbolnr>
      <xsl:value-of select="@number"/>
    </symbolnr>

    <symbolname>
      <xsl:value-of select="@name"/>
    </symbolname>
  </xsl:template>

  <xsl:template match="lastupdate">
    <!-- Copy the original node as is -->
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
4

1 に答える 1

0

述語フィルターを調整する必要があります。time現在、 who's のすべての要素を@period=2選択しており、それらの一致した要素から 2 番目の要素をサブ選択しています。

<!-- Apply the <time period="2"> element in $time position, the time of day -->
<xsl:apply-templates select="forecast/tabular/time[@period = '2'][number($time)]"/>

パラメータで@period指定されたを選択するには、次を使用します。$time

<xsl:apply-templates select="forecast/tabular/time[@period = number($time)]"/>

次に、そのセットに述語フィラーを適用することで、次の 4 日間をファイラーできます。

<xsl:apply-templates select="forecast/tabular/time[@period = number($time)]
                                       [position() > 1 and position() &lt;= 5]"/>
于 2013-05-22T02:55:10.730 に答える