我无法弄清楚如何选择祖父母的第一个孩子。
结构简单:
<root>
<front>
<div>
<head>a</head>
<head>1</head>
</div>
<div>
<head>b</head>
<head>2</head>
</div>
</front>
<body>
<div>
<head>c</head>
<head>3</head>
</div>
<div>
<head>d</head>
<head>4</head>
</div>
</body>
<back>
<div>
<head>e</head>
<head>5</head>
</div>
<div>
<head>f</head>
<head>6</head>
</div>
</back>
</root>
如何在轴的帮助下选择头 e ?我需要在XSLT样式表中进行测试,因此强调轴。
选择//head[parent::*[self::div]][1][ancestor::back]
不起作用,它仍会同时选择 e 和 f 。
答案 0 :(得分:0)
在root
的上下文中,以下XPath 2.0表达式将选择head
的第一个back
孙子:
back/(div/head)[1]
要在XPath 1.0中执行相同操作,请尝试:
back/div[head][1]/head[1]
我有一个样式表选择的头,现在我需要测试是否 它是后面第一个div的第一个头。
这是一个完全不同的问题。从任何head
的上下文中,您可以选择当前祖父母的第一个head
的第一个div
:
../../div[1]/head[1]
请注意,这假设(与您的问题一样)第一个div
确实有一个head
孩子。
要将范围限制为仅back
祖父母,您可以使用:
ancestor::back/div[1]/head[1]
答案 1 :(得分:0)
假设上下文元素为<head>f</head>
,则以下内容应该有效:
如果您正在寻找祖父母的第一个孩子
../../div[1]
如果您正在寻找祖父母的孩子
../../*[1]
答案 2 :(得分:0)
工作解决方案有点棘手(XPath 2.0):
//head[count(parent::div[preceding-sibling::div]) < 1 and ancestor::back][1]
在XSLT样式表中适用于我(XSLT 1.0):
test=".[count(parent::div[preceding-sibling::div]) < 1 and ancestor::back][1]"
<强>更新强>
如评论中所示,还有另一种解决方案,更适合XSLT:
test=". is ancestor::back/div[1]/head[1]"