2011-02-02 32 views
10

Tôi mới dùng XPath, nhưng tôi có thể thấy nó mạnh như thế nào. Tôi đang xem mã nguồn của số này link và chỉ muốn trích xuất nội dung và tên người dùng từ hai phần sau của trang, để đơn giản vì lợi ích nằm gần đầu mã nguồn.XPath trong R sử dụng gói XML

content = "[Lưu Trữ] Simburgur của Sống Suối [Offline] Gears of War 3"

<div class="username">Simburgur</div> 

Đây là mã của tôi trong R:

doc <- htmlParse("http://forums.epicgames.com/archive/index.php/t-672775.html") 
xpathSApply(doc, "//head/meta[@name=\"description\"]") 

trả về

[[1]] 
<meta name="description" content="[Archive] Simburgur's Live Stream [Offline] Gears of War 3" /> 

Rõ ràng, trong ví dụ này, tất cả những gì tôi muốn là những gì bên trong dấu ngoặc kép của nội dung = nhưng bị kẹt và dường như không thể nhận được biểu thức của tôi để trả về chuỗi mà tôi muốn.

Tôi lặp lại. Tôi mới dùng XPath. :)

+0

Câu hỏi hay, +1. Xem câu trả lời của tôi cho hai giải pháp ngắn và hiệu quả. :) –

Trả lời

9

Sử dụng:

/*/head/meta[@name='description']/@content 

này vẫn chọn một nút thuộc tính, nhưng có lẽ đó là một cách dễ dàng trong PL của bạn để có được chuỗi giá trị của các thuộc tính.

Để có được chỉ là giá trị chuỗi, sử dụng:

string(/*/head/meta[@name='description']/@content) 

Do lưu ý: Sử dụng // viết tắt có thể dẫn đến đánh giá rất chậm của biểu thức XPath, bởi vì nó có thể gây ra một traversal tuyến tính của một cây (toàn bộ).

Luôn tránh sử dụng // nếu cấu trúc của tài liệu XML được biết đến tĩnh.

3

Bạn thân thiết. Điều này nên làm điều đó.

//head/meta[@name=\"description\"]/@content 

Dấu ngoặc đơn đang hạn chế lựa chọn thẻ meta, nhưng bạn vẫn phải chỉ định thuộc tính bạn muốn.

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