我有一个关于xml解析的问题。 我有带空格的标签,例如
<item1 id=rt name ="th">
<point1>1254</point1>
<point2>1254</point2>
</item>
如何从此标记中提取ID和名称?
我现在正在使用R作为我需要的其余分析,但我也可以在perl和python中进行文件解析。 什么是最好的解决方案?
答案 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