2014-07-05 3 views
0

이 html을 가지고 있는데 텍스트 bla bla blabla3 bla3 bla3을 추출하고 싶습니다.XPath가 여러 개의 동일한 div 태그 내에서 텍스트를 추출합니다.

지금까지 나는이

//div[@class="s1"]//ul[@class="a1"]//text()[1]')->item(0)->nodeValue; 

시도가 있지만 제대로 동작하지 않습니다. 귀하의 예를 들어

<div class="s1"> 
    <ul class="a1">bla bla bla</ul> 
    <ul class="a1">bla2 bla2 bla2</ul> 
</div> 

<div class="s1"> 
    <ul class="a1">bla3 bla3 bla3</ul> 
    <ul class="a1">bla4 bla4 bla4</ul> 
</div> 

답변

1

, 당신은

bla bla blabla3 bla3 bla3 

을 제공하는 XPath를

concat(
(//div[@class='s1']//ul[@class='a1'][1])[1], 
(//div[@class='s1']//ul[@class='a1'][1])[2] 
) 

을 사용할 수 있습니다하지만 당신은 아마 이미 알고, 및 요소의 알 수없는 번호를이 작업을 수행 할 수 .

불행히도, 순수 XPath에서는 가능하지 않다고 생각합니다. 즉, 자동으로 여러 노드의 텍스트를 연결합니다. 최근 비슷한 상황이 발생하여 연결 루프를 사용하는 것으로 끝났습니다. 당신이 XQuery를 사용할 수있는 경우이 쉽게 :

UPDATE 당신은 문자열 사이에 공백이 필요하면

for $x in //div[@class="s1"]//ul[@class="a1"][1] return $x/text() 

, 당신은 당신이 말을하지 않습니다

for $x in //div[@class="s1"]//ul[@class="a1"][1] return concat($x, " ") 
+0

같은 것인가? – user3807890

+0

@ user3807890, 예, 편집을 참조하십시오. – harpo

1

사용할 수 있습니다 XPath 표현식을 평가하기 위해 어떤 도구, 라이브러리 또는 응용 프로그램을 사용하는지 질문하지만 ->item(0)->nodeValue에 대한 언급은 표준 DOM 트리로 일부 언어 또는 기타로 작업하고 있음을 나타냅니다. 그렇기 때문에 XPath를 사용하여 각 div class="s1" 안에있는 첫 번째 ul class="a1"을 추출한 다음 해당 DOM 요소의 textContent (은 아니요,nodeValue이 아닌 요소 노드에 대해 정의 됨)을 사용합니다.

이 될 필요는 XPath 뭔가 당신이 다음 어떤 방법으로 라이브러리에 그 목록을 반복 있도록, 당신에게 ul 요소 노드, 각각의 일치 div 하나를 포함하는 노드 목록을 줄 것이다 평가

//div[@class="s1"]/ul[@class="a1"][1] 

같은 각 노드의 textContent을 제공하고 가져옵니다.

편집 : PHP DOMXPath에 대한

내가 그렇게 쿼리를 사용할 수
$nodelist = $xpath->query('//div[@class="s1"]/ul[@class="a1"][1]'); 
foreach($nodelist as $node) { 
    echo $node->textContent . "\n"; 
} 
+0

PHP에서 xpath query를 사용하는 메신저 – user3807890

관련 문제