【问题标题】:R How to extract info from xml tagsR如何从xml标签中提取信息
【发布时间】:2013-12-26 17:25:17
【问题描述】:

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

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

如何从这些标签中提取 id 和 name?

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

【问题讨论】:

  • 这是真实数据吗?第一个标签不是格式良好的 XML,它缺少 id 值周围的引号。如果这是您拥有的数据,您可能无法使用 XML 工具。

标签: python xml r perl spaces


【解决方案1】:

例如,您可以这样做,使用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"

【讨论】:

  • 您更改了输入。正如@mirod 上面指出的,输入没有id="rt",而是id=rt
  • @simbabque 是的,我知道 XML 的格式真的很糟糕(se item1 标签不是 item)。我的回答是向 R 初学者展示如何使用 XML 包。
  • 很公平。在这种情况下,我建议指出这一点(你现在这样做了)。否则,他们可能会抱怨它不起作用。 ;-)
【解决方案2】:

正则表达式怎么样?

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

=\K 找到但不保存=

\W?\K 找到但不保存标记前的潜在引号。

\w+ 是你的标签。

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

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

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

如果您想进一步使用它,这里是正则表达式: http://regexr.com?37im8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2011-05-10
    • 2017-04-24
    • 1970-01-01
    相关资源
    最近更新 更多