我正在尝试使用 XSLT 从气象局网络服务中的以下 XML 中提取标题,但是我的 XSLT 选择返回空白。来源:
我正在尝试使用 XSLT 从气象局网络服务中的以下 XML 中提取标题,但我的 XSLT 选择返回空白。
来源:
<RegionalFcst xmlns="www.metoffice.gov.uk/xml/metoRegionalFcst" createdOn="2016-01-13T02:14:39" issuedAt="2016-01-13T04:00:00" regionId="se">
<FcstPeriods>
<Period id="day1to2">
<Paragraph title="Headline:">Frosty start. Bright or sunny day.</Paragraph>
<Paragraph title="Today:">A clear and frosty start in west, but cloudier in Kent with isolated showers. Then dry with sunny periods. Increasing cloud in west later will bring coastal showers with freshening southerly winds. Chilly inland, but less cold near coasts. Maximum Temperature 8C.</Paragraph>
</Period>
</FcstPeriods>
</RegionalFcst>
我的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>
<xsl:value-of select="FcstPeriods/Period/Paragraph"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我已将根目录更改为 /RegionalFcst 并尝试进行其他类似的更改,例如在 FcstPeriods 之前添加前导斜杠,但没有任何效果,直到我从源 XML 中删除第一行和最后一行 - 然后它才能完美运行。
这在测试中是没问题的,但我当然想使用气象局提供的网络服务,这就是他们呈现它的方式。
有什么想法吗?
除了“michael.hor257k”的答案之外,还有另一种解决方案,针对 XSLT 2.0 版本。
XSLT 2.0
使用 xpath-default-namespace
属性。对于上面的例子,它看起来像这样:
<xsl:stylesheet xpath-default-namespace="www.metoffice.gov.uk/xml/metoRegionalFcst" ... >
那么您不需要在 XPath 引用的每个元素中重复命名空间前缀:
<xsl:value-of select="FcstPeriods/Period/Paragraph"/>
而不是
<xsl:value-of select="met:FcstPeriods/met:Period/met:Paragraph"/>