在删除根节点之前,XSLT Transform不起作用

haz*_*mat 1 xml xslt

我正在尝试使用XSLT从Met Office Web服务中从下面的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>
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

我已经将根更改为/ RegionalFcst并尝试了其他类似的更改,例如在FcstPeriods之前添加一个前导斜杠,但是在我从源XML中删除第一行和最后一行之前没有任何作用 - 然后它完美地工作.

这在测试中很好,但当然我想使用Met Office提供的Web服务,以及它们如何呈现它.

有任何想法吗?

mic*_*57k 8

问题是:您的XML将其元素放在命名空间中.

解决方案:在样式表中声明相同的名称空间,为其分配前缀并使用该前缀来处理源XML中的元素:

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:met="www.metoffice.gov.uk/xml/metoRegionalFcst"
exclude-result-prefixes="met">
<xsl:template match="/">
  <html>
  <body>
   <xsl:value-of select="met:RegionalFcst/met:FcstPeriods/met:Period/met:Paragraph[@title='Headline:']"/>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)