8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在我删除根节点之前,XSLT 转换不起作用

Drdre01 2月前

12 0

我正在尝试使用 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 中删除第一行和最后一行 - 然后它才能完美运行。

这在测试中是没问题的,但我当然想使用气象局提供的网络服务,这就是他们呈现它的方式。

有什么想法吗?

帖子版权声明 1、本帖标题:在我删除根节点之前,XSLT 转换不起作用
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Drdre01在本站《xml》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 具体来说,搜索“XSLT 默认命名空间”将会带您找到另外 506 位问过同样问题的人。

  • 问题 :您的 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>
    
  • 谢谢,这也帮助我解决了问题。需要强调的是,这仅适用于默认命名空间 \'xmlns=...\'。如果源 xml 文件中有任何其他合格命名空间,则必须将它们添加到 \'xsl:stylesheet\',在 xpath 中使用(不带默认命名空间的临时前缀),并添加到 \'exclude-result-prefixes\'(作为空格分隔列表)。

  • 是的,它的工作方式相同。我的意思是,只有默认命名空间才需要创建前缀(上例中的 \'met\')。如果源文件已经有一个合格的命名空间,例如 \'xmlns:myns=...\',则可以在 xslt 中使用此前缀(或者如果更方便,可以重新标记它)。

  • 除了“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"/>
    
返回
作者最近主题: