我有一个关于xml解析的问题。 我的标签有空格在例如R如何从xml标签中提取信息
<item1 id=rt name ="th">
<point1>1254</point1>
<point2>1254</point2>
</item>
如何从这个标签中提取id和name?
我现在正在使用R,因为我需要其余的分析,但我也可以在perl和python中进行文件解析。 什么是最佳解决方案?
我有一个关于xml解析的问题。 我的标签有空格在例如R如何从xml标签中提取信息
<item1 id=rt name ="th">
<point1>1254</point1>
<point2>1254</point2>
</item>
如何从这个标签中提取id和name?
我现在正在使用R,因为我需要其余的分析,但我也可以在perl和python中进行文件解析。 什么是最佳解决方案?
例如,你可以做到这一点,利用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"
正则表达式怎么样?
/=\K\W?\K\w+/g
=\K
认定,但不保存=
\W?\K
认定,但你的标签之前不保存潜在的引号。
\w+
是你的标签。
您可以逐行读取文件中的行和你的比赛保存到一个数组,像这样:
my @matches = $line =~ /=\K\W?\K\w+/g;
然后用$matches[]
访问单个元素。
这,如果你想用它进一步发挥正则表达式在行动: http://regexr.com?37im8
这是真实的数据?第一个标签不是格式良好的XML,它缺少id值附近的引号。如果这是您拥有的数据,那么您可能无法使用XML工具。 – mirod