我有一個關於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