首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT和for-each循环

XSLT和for-each循环
EN

Stack Overflow用户
提问于 2014-02-08 17:34:28
回答 1查看 61关注 0票数 0

我在这里使用XML文件。

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml

我写了这段代码

代码语言:javascript
复制
  <xsl:for-each select="registry/record">

但是,由于XML中的这一行,它永远找不到任何东西。

代码语言:javascript
复制
<registry xmlns="http://www.iana.org/assignments" id="service-names-port-numbers">

如果我把它改成

代码语言:javascript
复制
<registry>

它可以工作,但是我不能更改XML,我必须更改XSLT。我能做些什么才能让它发挥作用?我只需要找到那些记录。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-08 17:56:06

XSLT和XPath是命名空间感知的。不幸的是,它们没有任何符号来设置路径的默认名称空间,因此您必须使用绑定到名称空间的显式前缀。

如果您不熟悉XML名称空间,请检查它们。他们很重要。

以您的具体示例为例,以下是SNTP文档开始的简化版本

代码语言:javascript
复制
<registry xmlns="http://www.iana.org/assignments" id="service-names-port-numbers">
  <title>Service Name and Transport Protocol Port Number Registry</title>
  <category>Service Names and Transport Protocol Port Numbers</category>
  <updated>2014-02-06</updated>
  <xref type="rfc" data="rfc6335"/>
  <expert> ... names of experts ... </expert>
  <note> ... usage notes ... </note>
  <record>
    <protocol>tcp</protocol>
    <xref type="person" data="Jon_Postel"/>
    <description>Reserved</description>
    <number>0</number>
  </record>
</registry>

xmlns="http://www.iana.org/assignments"是默认的命名空间绑定。本文档中的所有元素都将位于该名称空间中,除非它们具有绑定到另一个名称空间的前缀,或者使用另一个xmlns=来更改它们及其子名称空间的默认值。

您的XPaths和Match表达式必须引用此命名空间,否则它们将无法工作。

变化

代码语言:javascript
复制
 <xsl:for-each select="registry/record">

代码语言:javascript
复制
 <xsl:for-each select="assignments:registry/assignments:record"
   xmlns:assignments="http://www.iana.org/assignments">

(您可以使用比assignments更短的前缀;我只是想尽可能清楚地说明这一点。您还可以在XSLT文档中将前缀绑定得更高--通常是在<xsl:stylesheet>元素上--因此它可以在整个样式表中使用,而不仅仅是在这里)。

假设您的其余代码是正确的,这将有效。

另外:一般来说,<xsl:for-each>可能会被过度使用。通常,除非您确实需要在这里进行与样式表中其他任何地方不同的处理,否则您应该使用<xsl:apply-templates>,以便适用正常的模板匹配规则。否则,您将很难扩展和维护样式表。XSL是一种规则匹配的非过程语言;学习以这种方式使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21649405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档