从xml中提取值

时间:2013-03-01 10:04:37

标签: python regex xml awk sed

QExtremely业余程序员,寻求你的帮助。

我必须经常编辑看起来像这样的

的xml文件
    --- blah blah blah plenty xml stuff above ---
    <lex marker="mala" sentiment="negative"/>
    <lex marker="malas" sentiment="negative"/>
    <lex marker="maleducad\p{Ll}*" sentiment="negative" regex="true"/>
    <lex marker="mali\p{Ll}+sima\p{Ll}*" sentiment="negative" regex="true"/>
    <lex marker="mali\p{Ll}+simo\p{Ll}*" sentiment="negative" regex="true"/>
    --- blah blah blah plenty xml stuff below ---

使用相当复杂的正则表达式搜索和替换过程,我只能提取标记属性的值。 (这就是我所关心的)。

但这很耗时,在Python中必须有一种非常简单的方法来查找属性marker =“SOME_TEXT”部分并将所有值放入数组中,然后打印出该数组(到文件中)。但我无法弄明白:(

我正在寻找一种不包括导入任何类型的XML库的方法,因为我希望尽可能保持简单(和逻辑),以便我的业余编程思想学习)并且我只对它感兴趣无论如何,在该特定属性的数据中,我不关心文件的其余部分(或者它的XML-ness)。

我只在python中问过,因为我认为这是一种我渴望进入的语言。但是如果你能想到一个Linux终端的方式(sed,awk e.t.c.)我也很乐意走这条路。

1 个答案:

答案 0 :(得分:4)

将XML与正则表达式匹配变得太复杂,太快。你真的是should not do that

使用XML解析器,Python有几个可供选择:

  • ElementTree是标准库的一部分
  • lxml是一个快速且功能丰富的基于C的库。

ElementTree示例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.xml')
for elem in tree.findall('lex'):
    print elem.attrib['marker']