2011-02-02 61 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 

括号限制元标记的选择,但您仍然必须指定所需的属性。