【问题标题】:Get root attribute value based on current node value根据当前节点值获取根属性值
【发布时间】:2015-04-25 05:37:33
【问题描述】:

我正在尝试根据当前节点的值来获取根节点的某个属性的值。

例子:

<root src="Bob" att="Mark">
<div>
<p>My name is <ref bar="src"/>.</p>
<p>My name is <ref bar="att"/>.</p>
</div>
</root>

我叫鲍勃。

我叫马克。

到目前为止,我有这个 XPATH。它一直有效,直到我尝试根据@bar 中提供的本地属性值测试名称。 @bar 在根目录中有属性的名称,我需要在其中提取值。

这行得通...

/*/@*[name()='src']

这不是。

/*/@*[name()=@bar]

我希望得到的值是@src 的值,p 标签中的“foo”。

我必须使用 XPath 1.0。

编辑: 我正在尝试找到应该是当前节点的 ref 标记的路径。

/*/@*[name()=//ref[count(preceding::ref)]/@bar]

非常感谢任何帮助!

【问题讨论】:

  • 请更清楚地说明本文档中的内容是稳定和给定的,您究竟是在“动态获取”什么。 /*/@*[name()=@bar] 显然是错误的,但你到底想用它实现什么?
  • 请提供更多上下文,说明您使用 XPath 的编程语言,显示该代码。
  • 我必须使用 XPath 1.0。我在 CMS 工作。该名称与对话无关。

标签: xml xpath


【解决方案1】:

您需要在谓词中包含指向bar 属性的路径。

/*/@*[name()=../div/p/ref/@bar]

【讨论】:

  • 感谢您的回复。如何确定我当前所在的 ref 标签?
  • 这匹配在文档顺序中被选中的节点列表。因此,在您的示例中,src 排在第一位,att 排在第二位。您可以附加位置谓词 [1][2] 以独占获取第一个和第二个 ref 标签。
  • 我有很多失望,但我也在尝试解决谓词。我应该作用于当前的 ref 节点。
  • 如果您从 XSLT 代码中调用它,您可以使用 current() 来引用当前节点。 /*/@*[name()=current()/@bar]
  • 不幸的是,我正在使用的软件中没有实现 current()。我也试过“./@bar”但没有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多