示例1:
<body>
<div>
<h1>category1</h1><a>sibling1</a><a>sibling2</a><h1>category2</h1><a>sibling3</a><a>sibling4</a>
</div>
</body>
所以他们没有共同的祖先,除了他们在单一的div下。您将如何生成(可以用xpath表示)以下生成的字符串数据格式?
category1,sibling1,sibling2;
category2,sibling3,sibling4;
如果示例1是这样的:
<body>
<div>
<span>
<h1>category1</h1><a>sibling1</a><a>sibling2</a>
</span>
<span>
<h1>category2</h1><a>sibling3</a><a>sibling4</a>
</span>
</div>
</body>
在这种情况下,它非常简单,所需要的只是通过<SPAN>
xpath表达式捕获所有//span
标记,并查看每个<span>
标记为<h1>
}&amp;其中<a>
。
答案 0 :(得分:1)
您可以使用h1
选择所有//h1
,然后选择h1的两个兄弟,即:following-sibling::*[position() < 3]
答案 1 :(得分:1)
由于缺少XPath 2.0中存在的string-join()
函数,因此很难在XPath 1.0中实现生成的字符串。
一般情况下,如果您可以迭代每个h1节点,则可以使用以下xpath选择下一个h1之前相邻兄弟节点的所有文本(例如,对于第一个h1):
"/html/body/div/h1[1]//text()
|
/html/body/div/h1[1]/following-sibling::*
[count( . | following-sibling::h1[1]/preceding-sibling::* )
= count( following-sibling::h1[1]/preceding-sibling::* )]//text()"
对于最后一个h1节点,路径非常简单:
"/html/body/div/h1[last()]//text()
|
/html/body/div/h1[last()]/following-sibling::*//text()"
在XPath 2.0中,您可以直接连接字符串,如下所示:
string-join(xpath,',')
你可以像上面那样xpath。