2011-02-02 32 views
10

Ben XPath için yeni, ancak ne kadar güçlü olduğunu görebiliyorum. Bu link'un kaynak koduna bakıyorum ve sadece içeriği ve kullanıcı adını sayfanın aşağıdaki iki parçasından elde etmek istiyorum. Bu, basitlik uğruna kaynak kodun en üstünde yer alıyor.XML paketini kullanarak X içinde Xml Paket

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

verir:

content = "War 3 [Arşiv] Simburgur Canlı Akış [Çevrim] Gears" İşte

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

R içinde benim kodudur
[[1]] 
<meta name="description" content="[Archive] Simburgur's Live Stream [Offline] Gears of War 3" /> 

Açıkçası, bu örnekte, tek istediğim, içeriğin tırnaklarının içinde olan şeydir = ama takılıyorum ve istediğim dizgiyi döndürmek için ifademi alamıyorum.

Tekrarlıyorum. XPath’da yeniyim. :)

+0

İyi soru, +1. İki kısa ve verimli çözüm için cevabımı görün. :) –

cevap

9

Kullanım:

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

Bu hala bir öznitelik düğümü seçer, ama muhtemelen özelliğinin dize değeri elde etmek için PL kolay bir yolu yoktur. bunun doğrusal bir geçişi neden olabilir, çünkü // kısaltmayı kullanmak XPath ifadesi çok yavaş değerlendirmesinde neden olabilir:

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

not Do:

sadece dize değeri elde etmek için, kullanmak bir bütün (alt) ağaç.

XML belgesinin yapısı statik olarak biliniyorsa, her zaman // kullanmaktan kaçının.

3

Siz yakınlarınızda. Bu yapmalı.

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

parantez meta etiketleri seçimini kısıtlayıcı, ancak yine de istediğiniz özniteliği belirtmeniz gerekir.

İlgili konular