确定多个XPath的存在和值

时间:2015-05-08 17:56:50

标签: javascript dom xpath

我有:

<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,所以我对它们知之甚少。我该如何处理?

1 个答案:

答案 0 :(得分:0)

您可以将具有class属性的元素与class匹配,如下所示:

//span[contains(concat(' ',normalize-space(@class),' '),' class')]

或者将class1class2匹配为更具体(格式化以便于阅读):

//span[
        contains(concat(' ',normalize-space(@class),' '),' class1 ') 
            or 
        contains(concat(' ',normalize-space(@class),' '),' class2 ')
    ]