我正在尝试通过 XSLT 将 XML 数据导入 Adobe InDesign。InDesign 似乎无法使用属性,即使它可以看到属性。
我可以访问这种格式的免费天气数据:http ://www.yr.no/sted/Norge/Oslo/Oslo/Oslo/varsel.xml
我不确定我使用 XSLT 将属性转换为常规 XML 格式的方法是否最好,但它确实有效。
我遇到的问题是我需要明天的天气数据,但我只得到今天的数据。数据存储在 weatherdata/forecast/tabular/time 中。
我<xsl:param name="speedmps" select="weatherdata/forecast/tabular/time[@period='2']/windSpeed/@mps" />
用来选择数据,但这只会选择第一个匹配项。第一场比赛是今天的天气(从12:00到18:00),我想要的是第二场比赛(第二个时段='2'比赛,即明天12:00到18:00)。一天以 4 个时段呈现,XML 文件获取了几天的预报。理想情况下,我想为今天的天气制作一个 XSLT,为明天的天气制作一个等等。
我的代码主要是剪切和粘贴,然后我尝试对其进行编辑以执行我想要的操作。我尝试制作一个 if 块,但我找不到任何可以构建的示例。目前我在 XSLT 方面的技能太基础了,而且我的期限很短。我在源数据中发现的是,时间段会根据您获取数据的时间而变化。所以我不能说它应该选择第 6 个区块,因为明天 period='2' 可能是一天中这个时候的第 5 个。(期间='0' 是 00:00 到 09:00,因此期间 0 在 09:00 之后被删除,依此类推)。
现在的第一场比赛是:
<time from="2013-02-27T12:00:00" to="2013-02-27T18:00:00" period="2">
<!-- Valid from 2013-02-27T12:00:00 to 2013-02-27T18:00:00 -->
<symbol number="1" name="Klarvær" var="01d" />
<precipitation value="0" />
<!-- Valid at 2013-02-27T12:00:00 -->
<windDirection deg="187.2" code="S" name="Sør" />
<windSpeed mps="1.5" name="Flau vind" />
<temperature unit="celsius" value="-1" />
<pressure unit="hPa" value="1030.2" />
</time>
现在的第二场比赛是:
<time from="2013-02-28T12:00:00" to="2013-02-28T18:00:00" period="2">
<!-- Valid from 2013-02-28T12:00:00 to 2013-02-28T18:00:00 -->
<symbol number="1" name="Klarvær" var="01d" />
<precipitation value="0" />
<!-- Valid at 2013-02-28T12:00:00 -->
<windDirection deg="181.3" code="S" name="Sør" />
<windSpeed mps="3.1" name="Svak vind" />
<temperature unit="celsius" value="2" />
<pressure unit="hPa" value="1015.7" />
</time>
对不起,英语不是我的母语,我尽量解释清楚。
这是我的 XSLT 代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes" omit-xml-declaration="no" cdata-section-elements="" />
<!-- params -->
<xsl:param name="location" select="weatherdata/location/name"/>
<xsl:param name="alternate" select="weatherdata/links/link[@id='overview']/@url"/>
<xsl:param name="base" select="'file:///d:/temp/yr/sky/'"/>
<!-- We use the text forecast dates or? -->
<xsl:param name="lastupdate" select="weatherdata/meta/lastupdate" />
<xsl:param name="symbolnumber" select="weatherdata/forecast/tabular/time[@period='2']/symbol/@number" />
<xsl:param name="symbolname" select="weatherdata/forecast/tabular/time[@period='2']/symbol/@name" />
<xsl:param name="symbolvar" select="weatherdata/forecast/tabular/time[@period='2']/symbol/@var" />
<xsl:param name="precip" select="weatherdata/forecast/tabular/time[@period='2']/precipitation/@value" />
<xsl:param name="directiondeg" select="weatherdata/forecast/tabular/time[@period='2']/windDirection/@deg" />
<xsl:param name="directioncode" select="weatherdata/forecast/tabular/time[@period='2']/windDirection/@code" />
<xsl:param name="directionname" select="weatherdata/forecast/tabular/time[@period='2']/windDirection/@name" />
<xsl:param name="speedmps" select="weatherdata/forecast/tabular/time[@period='2']/windSpeed/@mps" />
<xsl:param name="speedname" select="weatherdata/forecast/tabular/time[@period='2']/windSpeed/@name" />
<xsl:param name="tempvalue" select="weatherdata/forecast/tabular/time[@period='2']/temperature/@value" />
<xsl:template match="/">
<yr>
<testtag>
<title><xsl:value-of select="$location"/></title>
<alternate><xsl:value-of select="$alternate"/></alternate>
<base><xsl:value-of select="$base"/></base>
<lastupdate><xsl:value-of select="$lastupdate"/></lastupdate>
<symbolvar><xsl:value-of select="$symbolvar"/></symbolvar>
<symbolnr><xsl:value-of select="$symbolnumber"/></symbolnr>
<symbolname><xsl:value-of select="$symbolname"/></symbolname>
<precip><xsl:value-of select="$precip"/></precip>
<tempval><xsl:value-of select="$tempvalue"/></tempval>
<speedname><xsl:value-of select="$speedname"/></speedname>
<speedmps><xsl:value-of select="$speedmps"/></speedmps>
<dirdeg><xsl:value-of select="$directiondeg"/></dirdeg>
<dircode><xsl:value-of select="$directioncode"/></dircode>
<dirname><xsl:value-of select="$directionname"/></dirname>
<Image><xsl:attribute name="href"><xsl:value-of select="$base"/><xsl:value-of select="$symbolvar"/>.png</xsl:attribute></Image>
</testtag>
</yr>
</xsl:template>
</xsl:stylesheet>