2011-02-02 26 views
10

Jestem nowy w XPath, ale widzę, jak potężny jest. Patrzę na kod źródłowy tego link i po prostu chcę wyodrębnić zawartość i nazwę użytkownika z dwóch kolejnych części strony, które ze względu na prostotę znajdują się w górnej części kodu źródłowego.XPath w R przy użyciu pakietu XML

content = "Żywe Stream [Offline] Gears [Archiwum] Simburgur za of War 3"

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

Oto mój kod wewnątrz R:

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

która zwraca

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

Oczywiście w tym przykładzie wszystko, czego chcę, to to, co jest w cudzysłowach content =, ale utknąłem i nie mogę sprawić, że moje wyrażenie zwróci żądany ciąg znaków.

Powtarzam. Jestem nowy w XPath. :)

+0

Dobre pytanie, +1. Zobacz moją odpowiedź na dwa krótkie i skuteczne rozwiązania. :) –

Odpowiedz

9

Zastosowanie:

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

To nadal wybiera węzeł atrybutu, ale prawdopodobnie nie jest łatwym sposobem w Polsce, aby uzyskać wartość ciągu atrybutu.

Aby uzyskać tylko wartość ciągu, należy:

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

Należy pamiętać: Użycie skrótu // może spowodować bardzo powolnym oceny wyrażenia XPath, ponieważ może to spowodować liniowe przechodzenie z całe (pod) drzewo.

Zawsze należy unikać używania //, jeśli struktura dokumentu XML jest statycznie znana.

3

Jesteś blisko. To powinno to zrobić.

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

Nawiasy ograniczają wybór metatagów, ale wciąż trzeba określić żądany atrybut.

Powiązane problemy