首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择祖先的属性;“./..”"ancestor::<tagname>“不起作用

选择祖先的属性;“./..”"ancestor::<tagname>“不起作用
EN

Stack Overflow用户
提问于 2008-11-03 19:29:36
回答 3查看 8.2K关注 0票数 0

我正在运行一个XML文档,选择所有的元素,并基于祖先创建链接,这个祖先通常是树中的两个节点,但偶尔会有3个或4个节点向上。对于大多数元素,使用<xsl:value-of select="translate(../../@name,$uc,$lc)" />可以很好地工作,但是对于祖先位于大约3个节点的情况下,我想使用<xsl:value-of select="translate(ancestor::package/@name,$uc,$lc)" />,但这不起作用。

我使用Ruby中的xsltproc进行XSL转换。

示例树(是的,它包含XSLT,不,我不想处理它):

代码语言:javascript
复制
<package name="blork!" xmlns="http://xml.snapin.com/XBL">
  <xsl:template name="doSomething">
    <tokens>
      <token name="text-from-resource" export="public" />
    </tokens>
  </xsl:template>
</package>

我正在使用的XSL:

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s4="http://xml.snapin.com/XBL">
  <xsl:template match="/">
    <xsl:if test="count(//s4:token) >0">
      <xsl:text>Tokens!</xsl:text>
      <xsl:for-each select="//s4:token">
        <xsl:choose>
          <xsl:when test="@export='global'" />
          <xsl:otherwise>
            <xsl:value-of select="translate(ancestor::s4:package/@name,$uc,$lc)" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

编辑:啊,对,忘记了select上的命名空间。解析器在大多数情况下正确地找到了这个祖先,但是当其中有xsl:节点,并且目标文件中没有xsl的命名空间时,它仍然找不到它。我不想修改目标文件,因为它是生产代码--我只是在编写一个autodoc工具。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-03 19:31:59

您的问题可能与名称空间有关。你还没有把这些包含在样本树中--你能不能更精确一点地粘贴在上面呢?假设包节点与令牌节点位于同一个命名空间中,请尝试:

代码语言:javascript
复制
<xsl:value-of select="translate(ancestor::s4:package/@name,$uc,$lc)" />

您也可以只测试不限定的名称,但测试速度会慢一些:

代码语言:javascript
复制
<xsl:value-of select="translate(ancestor::*[local-name()='package']/@name,$uc,$lc)" />

W3C本地名称()规范这里

票数 3
EN

Stack Overflow用户

发布于 2008-11-03 22:17:22

我认为在目标文档中声明'xsl‘前缀的命名空间是没有办法的,只要您使用的是支持命名空间的XML处理器。当您尝试用xsltproc和给定的样式表转换目标文档时,没有看到任何错误吗?

票数 1
EN

Stack Overflow用户

发布于 2008-11-03 22:36:30

您可以反复检查您的工具使用的XSLT版本。我认为XSLT1.0不支持“祖先:.”

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

https://stackoverflow.com/questions/259656

复制
相关文章

相似问题

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