代码之家  ›  专栏  ›  技术社区  ›  Pierre

XSLT:获取元素的前缀?

  •  4
  • Pierre  · 技术社区  · 16 年前

    在XSLT 1.0中,可以使用以下函数获取XML元素的本地名称或名称空间URI:

    string local-name (node)
    

    string namespace-uri(node)
    

    但是有标准吗 功能 得到 前缀

    3 回复  |  直到 16 年前
        1
  •  9
  •   Tomalak    16 年前

    据我所知不是这样。如果确定节点名称具有前缀,则可以使用以下选项:

    substring-before(name(), ':')
    

    substring-before(
      name(), 
      concat(':', local-name())
    )
    

    后一种说法基于以下事实: substring-before() 未找到搜索的字符串时返回空字符串。这样,对于前缀为 不固定的名字。

        2
  •  2
  •   Robert Rossney    16 年前

    一般来说,如果您关心元素的前缀,那么您就错了。您应该只关心它所属的名称空间。

    在您的评论中,您注意到您正在谈论的API要求您提供名称空间和名称空间前缀。没错,但是您链接到的API实际上并不关心名称空间前缀是什么——事实上,如果您不提供名称空间前缀,它将随机生成名称空间前缀。

        3
  •  1
  •   Evan Lenz    16 年前

    "Perils of the name() function" .

    例如,只有在XPath2.0中才能可靠地获取元素的前缀。在XPath 1.0中,元素使用的前缀不是数据模型的一部分。

    给定以下XML:

    <my:foo xmlns:my="http://example.com" xmlns:my2="http://example.com"/>
    

    XPath 1.0中的name()函数可以合法地返回“my:foo”或“my2:foo”。但在XPath2.0中,它 必须 返回“my:foo”。

        4
  •  -1
  •   Arkadiusz Marek Binder    5 年前

    <xsl:select=“root()/xs:schema/namespace::node()[.=父项::*/@targetNamespace]/name()”/>