2009-03-19 34 views
10

Khi cố gắng phân tích cú pháp html bằng cách sử dụng Ngôn ngữ truy vấn Yahoo và chức năng xpath do YQL cung cấp, tôi gặp sự cố không thể trích xuất “text()” hoặc giá trị thuộc tính.
Ví dụ:
perma linkTruy vấn html bằng Yahoo YQL

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a' 

đưa ra một danh sách các neo như xml

<results> 
    <a class="question-hyperlink" href="https://stackoverflow.com/questions/661184/filling-the-text-area-with-the-text-when-a-button-is-clicked" title="In ASP.net, I need the code to fill the text area (in the form) when a button is clicked. Can you help me through by showing a simple .aspx code containing the script tag? ">Filling the text area with the text when a button is clicked</a>... 
</results> 

Bây giờ khi tôi cố gắng để trích xuất các giá trị nút sử dụng

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a/text()' 

tôi nhận được kết quả nối chứ không phải là một danh sách nút ví dụ

<results>Xcode: attaching to a remote process for debuggingWhy is b 
…… </results> 

Làm thế nào để tách nó thành các danh sách nút và làm cách nào chọn thuộc tính giá trị?

Một truy vấn như thế này

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a[@href]' 

đã cho tôi kết quả tương tự cho các truy vấn div/h3/a

Trả lời

20

YQL đòi hỏi sự biểu hiện xpath để đánh giá một itemPath chứ không phải là văn bản nút. Nhưng một khi bạn có một itemPath bạn có thể chiếu các giá trị khác nhau từ cây

Nói cách khác, một ItemPath sẽ trỏ đến nút trong kết quả HTML chứ không phải là nội dung/thuộc tính văn bản. YQL trả về tất cả các nút phù hợp và con của chúng khi bạn chọn * từ dữ liệu.

dụ

select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a' 

này trả về tất cả các của một phù hợp với xpath. Bây giờ để chiếu nội dung văn bản mà bạn có thể trình chiếu nó bằng cách sử dụng

select content from html where url="http://stackoverflow.com" and xpath='//div/h3/a' 

"nội dung" trả về nội dung văn bản được tổ chức trong phạm vi nút.

Để chiếu thuộc tính, bạn có thể chỉ định thuộc tính tương ứng với biểu thức xpath. Trong trường hợp này, vì bạn cần href tương ứng với a.

select href from html where url="http://stackoverflow.com" and xpath='//div/h3/a' 

này trả <results> <a href="https://stackoverflow.com/questions/663973/putting-a-background-pictures-with-leds"/> <a href="https://stackoverflow.com/questions/663013/advantages-and-disadvantages-of-popular-high-level-languages"/> .... </results>

Nếu bạn cần cả hai thuộc tính 'href' và textContent, sau đó bạn có thể thực hiện truy vấn YQL sau:

select href, content from html where url="http://stackoverflow.com" and xpath='//div/h3/a' 

lợi nhuận:

<results> <a href="https://stackoverflow.com/questions/663950/double-pointer-const-issue-issue">double pointer const issue issue</a>... </results> 

Hy vọng điều đó sẽ hữu ích. cho tôi biết nếu bạn có thêm câu hỏi về YQL.

+0

Hoạt động như một sự quyến rũ! – Cherian

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