2011-02-02 47 views
10

我是XPath新手,但我可以看到它有多強大。我正在查看此link的源代碼,並且只是想從以下兩頁中提取內容和用戶名,爲簡單起見,它們位於源代碼的頂部附近。使用XML包的R內的XPath

CONTENT = 「[文字] Simburgur的Live 流[在線]戰爭機器3」

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

這裏爲R內我的代碼:

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

返回

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

很顯然,在這個例子中,我所需要的只是內容引用內部的東西=但是卡住了,似乎無法讓我的表達式返回我想要的字符串。

我重複一遍。我是XPath新手。 :)

+0

好問題,+1。看到我的答案是兩個簡短有效的解決方案。 :) – 2011-02-02 04:19:36

回答

9

使用

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

這仍然選擇屬性節點,但有可能是在你的PL一個簡單的方法來獲得屬性的字符串值。

得到公正的字符串值,使用

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

請注意:使用//縮寫可能導致的XPath表達式很慢的評價,因爲它可能會導致的線性遍歷整個(子)樹。

如果XML文檔的結構是靜態已知的,請始終避免使用//

3

你很近。這應該做到這一點。

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

括號限制元標記的選擇,但您仍然必須指定所需的屬性。