如何通过XPath获取多次出现的所有元素?
<!DOCTYPE book [
<!ELEMENT book (title,section+)>
<!ELEMENT chapter (title,body?,section*)>
<!ELEMENT title (#PCDATA)>
<!ATTLIST chapter number ID CDATA #REQUIRED>
]>
我需要所有出现过不止一次的title
元素。
答案 0 :(得分:3)
例如,您可以搜索与其后的标题完全相同的title
:
//title[.=following::title]
答案 1 :(得分:1)
如果您希望所有title
个元素出现多次,您可以使用此XPath 1.0表达式:
//title[.=following::title or .= preceding::title]
如果您要选择在文档中出现多次的所有title
元素的集合(没有重复),则可以使用此XPath 1.0表达式:
//title[.=following::title][not(. = preceding::title)]
要了解其中的差异,请考虑使用此XML(根据您的DTD无效,但仍然有用):
<r>
<title>a</title>
<title>b</title>
<title>c</title>
<title>a</title>
<title>a</title>
<title>b</title>
<title>b</title>
<title>b</title>
</r>
XPath#1选择:
<title>a</title>
<title>b</title>
<title>a</title>
<title>a</title>
<title>b</title>
<title>b</title>
<title>b</title>
(示例中的所有title
元素除c
title
)
XPath#2选择:
<title>a</title>
<title>b</title>
要么可以满足您的目的,具体取决于您对结果的确切要求。