代码之家  ›  专栏  ›  技术社区  ›  Stephen Sorensen

xpath选择引用的xml节点

  •  2
  • Stephen Sorensen  · 技术社区  · 15 年前

    我需要选择一个节点,其“name”属性等于当前节点的“references”属性。

    <node name="foo" />
    <node name="bar" references="foo" />
    

    ./node[@name=@references]
    ./node[@name={@references}]
    

    3 回复  |  直到 15 年前
        1
  •  3
  •   andre-r    15 年前

    我不完全确定这是否是你想要的。这将为您提供从任何节点引用到它的任何节点:

    //node[@name=//node/@references]
    
        2
  •  2
  •   James Sulak    15 年前

    不幸的是,纯XPath不可能实现您正在尝试的操作。每当您启动一个新谓词(被括号包围的部分),上下文都会更改为启动谓词的节点。这意味着您不能直接比较单个谓词中两个独立元素的属性,而不将一个元素存储在变量中。

    你用什么语言?必须将第一个节点的“name”属性值存储在变量中。

    <xsl:variable name="name" select="/node[1]/@name" />
    <xsl:value-of select="/node[@references = $name]" />
    

    在XQuery中

    let $name := /node[1]/@name
    return /node[@references = $name]
    
        3
  •  1
  •   Tomalak    15 年前

    node[@name = current()/@references]
    

    这在XSLT中起作用,因为您提到了“当前节点”,我将其翻译为“XSLT上下文节点”。不需要额外的变量。