R如何从xml标记中提取信息

时间:2013-12-09 14:43:59

标签: python xml r perl spaces

我有一个关于xml解析的问题。 我有带空格的标签,例如

<item1 id=rt name ="th">
<point1>1254</point1>
<point2>1254</point2>
</item>

如何从此标记中提取ID和名称?

我现在正在使用R作为我需要的其余分析,但我也可以在perl和python中进行文件解析。 什么是最好的解决方案?

2 个答案:

答案 0 :(得分:5)

您可以使用XML

来执行此操作
tt <- '<?xml version="1.0" encoding="utf-8"?>
<item id="rt" name ="th">
  <point1>1254</point1>
  <point2>1254</point2>
</item>
'

library(XML)
xpathSApply(doc,'//item',xmlGetAttr,'id')
[1] "rt"

修改

如果您的数据格式不正确,您应该像我上面那样重新格式化数据或逐行读取数据,并使用一些正则表达式提取信息(不推荐使用XML标记来使用正则表达式)

    tt <- '<item1 id=rt name ="th">
<point1>1254</point1>
<point2>1254</point2>
</item>
    '

    ll <- readLines(textConnection(tt))
    gsub('.*id=(.*)[ ]name.*','\\1',ll[1])
 [1] "rt"

答案 1 :(得分:0)

正则表达式怎么样?

/=\K\W?\K\w+/g

=\K找到但未保存=

\W?\K发现但未在标记之前保存潜在的引号。

\w+是您的标记。

您可以逐行读取文件并将匹配项保存到数组中,例如:

my @matches = $line =~ /=\K\W?\K\w+/g;

然后使用$matches[]访问各个元素。

如果您想进一步使用它,那么正在运行的正则表达式: http://regexr.com?37im8