2013-04-12 5 views
0

나는 다음과 같이하는 XPath 있습니다XPath는 : 하우투 반환 빈 값

"//<path to some table>/*/td[1]/text()" 

그것은 예를 들어, 비어 있지 않은 모든 TDS의 텍스트 값을 반환

<text1>, <text2>, <text3> 

그러나 문제는이다 노드 사이에 언급 된 값을 포함하는 일부 비어있는 tds 요소가있을 수 있습니다. 일부 식별자가 들어있는 결과를 얻으려는 것입니다. 예를 들어 다음과 같은 빈 값이 있습니다.

난 그냥 전체 노드를 취득하고 그것으로 일할 수있는,

"//<path to some table>/*/string(td[1]/text())" 

하지만 정의되지 않은 물론

를 반환 :3210

또는

<text1>,<null>, <null>, <text2>, <text3>, <null> 

나는 다음 중 하나를 사용하려고 내 코드에서 (모든 불필요한 정보를 잘라내십시오), 더 좋은 방법이있을 수 있습니까? 이 경우에 대한

HTML 예제 :

<html> 
<body> 
<table class="tablesorter"> 
<tbody>  
    <tr class="tr_class"> 
        <td>text1</td> 
        <td>{some text}</td>      

    </tr> 

    <tr class="tr_class"> 
        <td></td> 
        <td>{some text}</td> 
    </tr> 

    <tr class="tr_class"> 
        <td>text2</td> 
        <td>{some text}</td>      
    </tr> 

    <tr class="tr_class"> 
        <td>text3</td> 
        <td>{some text}</td>      
    </tr> 

    <tr class="tr_class"> 
        <td></td> 
        <td>{some text}</td>      
    </tr> 

</tbody> 
</table> 
</body> 
</html> 
+0

이 실제 XML이 아닌 일부 만들어 낸 이해가되지 않습니다 우리가 –

답변

1

그럼 단순히 td 요소,하지의 text() 자식 노드를 선택합니다. 따라서 경로가 //<path to some table>/*/td[1]으로 변경되었거나 //<path to some table>/*/td으로 변경된 경우 노드가 비어 있는지 여부에 상관없이 td 요소의 노드 집합이 생성되므로 각 노드의 문자열 내용에 액세스 할 수 있습니다 (XPath (각 요소 노드에 대해 string(.) 선택) 또는 호스트 환경 메소드 (예 : W3C DOM에 textContent 또는 MSXML DOM에 text). 그렇게하면 빈 문자열이 포함됩니다.

XPath 2.0 또는 XQuery를 사용하는 경우 //<path to some table>/*/td/string(.)을 직접 선택하여 일련의 문자열 값을 가질 수 있습니다. XPath 1.0에서는 마지막 단계에서 함수 호출을 사용하는 방법이 지원되지 않습니다.이 경우 td 요소 노드를 선택한 다음 별도의 단계에서 각각의 문자열 값에 액세스 할 수 있습니다.

+0

을 도울 수 있습니다 텍스트 만 '$의 X를 확인 ("// 테이블을 게시이 XPath를 사용할 수 있습니다 ) devTools와 Firebug에서 모두 Xpath 오류를 반환합니다. –

+0

글쎄, 분명히 '// <일부 경로 (/) 테이블>/*/td/string (.)'은 XPath 2.0 전용이므로 방화범이 끌리지 않는 것은 당연히 의미가 없으며 실패합니다. 그러나 Mozilla 브라우저에서 XPath 1.0을 사용하고 있다면'/ table [@ class = 'tablesorter']/tbody/*/td [1]'을 사용하여 모든'td' 요소 노드에 접근하여'textContent '문자열 내용을 얻기 위해 DOM에있는 요소 노드의 속성. –

+0

http://jsfiddle.net/9SyxE/ XPath 1.0과 Mozilla를 사용하여 빈 노드를 포함하여'td' 요소 노드를 찾고'textContent'를 출력하는 방법을보십시오. –

0

텍스트가있는 td [1] 만 원하고 텍스트가없는 것을 제거 하시겠습니까? 그렇다면, 당신은

//td[1][string-length(text()) > 1] 
+0

아니요, 사실 저는 그 빈 값을 잃고 싶지 않습니다. –