2009-09-22 12 views
1

HTML 사이트를 쿼리하는 데 XPath를 사용하고 있습니다. 지금까지는 꽤 잘 작동하지만 지금은 (벽돌) 벽을 치고 해결책을 찾을 수 없습니다 :-)XPath : "InnerHtml"의 "Exclude"태그 (<a href="">InnerHtml<span>excludeme</span></a>

<ul> 
<li><a href="">Text1<span>AnotherText1</span></a></li> 
<li><a href="">Text2<span>AnotherText2</span></a></li> 
<li><a href="">Text3<span>AnotherText3</span></a></li> 
</ul> 

내가 "TextX"부분을 선택합니다,하지만 <span></span> 에서하지 AnotherTextX 부분은 지금까지 나는 어떤 (순수) XPath를 가지고 올 수 없습니다 :

HTML은 다음과 같습니다 해결책이 필요합니다. (제 설정에서 불행히도 순수한 XPath 솔루션이 필요합니다.)

이것은 원하는 것을 선택하지만 "TextXAnotherTextX"가되고 "TextX"만 필요합니다.

/ul/li/a 

어떤 힌트가 있습니까? :-)

+0

안녕하세요! 문제를 해결하는 데 도움이되는 응답을 수락해야합니다. 감사! :) – Tomalak

+0

완료되었습니다. 죄송합니다. Stack Overflow (아직)에 익숙하지 않다 :-) –

+0

글쎄, 탑승 하신다. ;-) 받아 줘서 고마워. – Tomalak

답변

2

이 당신에게 <a>의 첫 번째 직접 텍스트 노드의 아이 가져옵니다

/ul/li/a/text()[1] 

을이 당신에게 (별도) 어떤 직접 텍스트 노드의 아이 얻을 것입니다 :

/ul/li/a/text() 

모두를 위의 경우 "TextX"을 반환하지만 다음과 같은 경우 :

<li><a href="">Text4<span>AnotherText3</span>TrailingText</a></li> 

이면 후자는 ["Text4", "TrailingText"]을 반환하지만 전자는 "Text4" 만 반환합니다.

귀하의 표현 /ul/li/a<a>의 모든 아이들의 문자열 값의 연결로 정의 <a>의 문자열 값을 가져옵니다, 그래서 당신은 "TextXAnotherTextX"를 얻을.

+1

매우 도움이되는 답변에 감사드립니다. 나는 웹을 며칠 동안 찾고 있었다! :-) 스택 오버플로가 정말 좋습니다! –

관련 문제