我有:
<span class="class1">One</span>
或:
<span class="class2">Two</span>
或:
<span class="class1">One</span>
<span class="class2">Two</span>
因此,可以有其中一个元素,也可以两者兼而有之。使用XPath,我需要从这些中提取文本。为此,例如,我使用纯JS:
document.evaluate("//SPAN[contains(concat(' ',normalize-space(@class),' '),' class1 ')]",document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
这适用于任何单个节点。我需要一个XPath,如果两个文本都存在,则从'class2'中提取文本,如果只存在一个,则需要从存在的文本中提取文本。
元素的位置是可以互换的。
所以:
<span class="class2">One</span> //->One
,
<span class="class2">Two</span> //->Two
,
<span class="class1">One</span>
<span class="class2">Two</span> //->Two
不言而喻,我很少使用XPath,所以我对它们知之甚少。我该如何处理?
答案 0 :(得分:0)
您可以将具有class属性的元素与class
匹配,如下所示:
//span[contains(concat(' ',normalize-space(@class),' '),' class')]
或者将class1
或class2
匹配为更具体(格式化以便于阅读):
//span[
contains(concat(' ',normalize-space(@class),' '),' class1 ')
or
contains(concat(' ',normalize-space(@class),' '),' class2 ')
]