2012-07-15 2 views
3

권리 요소가 표시되지, 이것은 내 쿼리입니다 :XPath 쿼리는 때때로 내가 XPath를 사용하고

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1"]/table/tr/td'); 

그리고 모든 것이 잘 작동합니다.

는 다음 나는 div의 조건을 변경하고 쿼리는 다음과 같다 :

$elements = $xpath->query('//div/div/div/div/div/div[@id="con2"]/table/tr/td'); 

그리고 나는 내가 볼을해야하는지 볼 수 없습니다. 나는이 할 경우

그러나 나중에 :

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1" or @id="con2"]/table/tr/td'); 

을 다시 con1의 요소를 참조하십시오. 왜 그런가요?

전체 코드

은 다음과 같습니다 :

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1" or @id="con2"]/table/tr/td'); 
foreach ($elements as $element) { 
    $str1=$element->getAttribute('class'); 
    $str2="first-td"; 
    $str3="status"; 
    if (strcmp($str1,$str2)==0) { 
     var_dump($element->nodeValue); 
    } 
    if (strcmp($str1,$str3)==0) { 
     echo $element->childNodes->item(0)->getAttribute('class'). "<br />"; 
    } 
} 

은 요약하면 : 내 상태는 con1 경우, 내가 올바른 결과를 참조하십시오. 단지 con2 인 경우 올바른 결과가 표시됩니다. 문제는 내가 or을 사용할 때 발생합니다. 이 경우 결과는 con1에서만 나타납니다. 첫 번째 조건을 완전히 채운 후에 멈추는 것과 같습니다. 그것들은 DOM 트리와 같은 레벨에 있습니다.

+2

와일드 카드 스타터를 가지고있을 때 모든 div를 갖고 있어야할까요? – freefaller

+0

네, 하나의 조건 만 살아 있다면 결과를 얻습니다. 또는을 사용하는 경우에만 첫 번째 점점. – ghostrider

+0

몇 개의 요소를 선택했는지 확인하십시오. 숫자가 2 인 경우 문제는 PHP 코드에 의해 발생하고 XPath 표현식이 올바르지 않은 것이 원인입니다. –

답변

0

은 무엇 당신이하려고하는 것은 같은 식 <div id="con1"><div id="con2">를 검색하는 것입니다,하지만 당신이 실제로하고있는 것은 사업부를 검색하는 것입니다하는 하나의 속성 ID = "CON1"가 또는 ID = "con2". 조건의 첫 번째 표현식이 true를 반환하면 <div id="con1"> 노드가 나타납니다. 말된다.

//div[@id="con1"]|//div[@id="con2" 

참고 : 문서의 id가 고유해야합니다 트리에서 어떤 노드 <div id="con1">//div[@id="con1"] 발견

당신이 뭔가를해야 할 두 노드를 얻으려면. 모든 경로를 지정하지 않아도됩니다.

관련 문제