2012-04-22 34 views
9

Tôi có XHTML kém tôi cần phân tích cú pháp với xpath. Có vẻ như sau:XPath trên các phần tử lồng nhau có văn bản() nhưng không có khoảng trắng

<div class="foo"> 
    i need this text 
    <br/> 
    <br/> 
    <span>sometext</span> 
</div> 

<div class="foo"> 
    <span>some other text</span> 
    <span>sometext</span> 
</div> 

Tôi muốn chọn TẤT CẢ nội dung có "tôi cần văn bản này" trong div đầu tiên. Vấn đề của tôi là, các phần tử div chứa các khoảng trắng hoặc các thứ khác, sao cho // div [@ class = "foo"]/text() trả về các chuỗi trống cho div thứ hai. Tôi muốn bỏ qua những trường trống này, làm thế nào tôi có thể làm điều đó?

+0

Liệu làm một cái gì đó giống như thêm [bình thường-không gian() = ""!] Ở phần cuối của sự giúp đỡ truy vấn của bạn? – Steve

Trả lời

13

Sử dụng:

//div 
    [.//text() 
     [normalize-space() = 'i need this text'] 
    ] 
    //text()[normalize-space()] 

này sẽ chọn bất kỳ phi khoảng trắng chỉ hậu duệ nút văn bản của bất kỳ div trong tài liệu, đó (div) có một hậu duệ text-nút chuỗi giá trị bình thường mà là chuỗi "i need this text".

Các normalize-space() chức năng phải mất một chuỗi (chuỗi giá trị của nút bối cảnh - nếu không có tranh luận được quy định) và tạo ra từ nó một chuỗi trong đó tất cả các nhân vật khoảng trắng ở đầu và đuôi được xóa, và bất kỳ nhóm bên trong của các ký tự khoảng trống liền kề được thay thế bằng một dấu cách.

-1

Hãy thử chọn này:

//span[@class='glyphicon glyphicon-list mr5']/..[contains(normalize-space(text()),'Applications')]

+0

Vui lòng thêm một số văn bản. –

Các vấn đề liên quan