在python中使用lxml解析标记内的XML数据

时间:2014-03-03 19:08:58

标签: python xml lxml xml.etree

我的问题是关于如何获取存储在标签中的信息,该信息不允许关闭标签。这是相关的xml:

<?xml version="1.0" encoding="UTF-8"?>
<uws:job>  
<uws:results>
    <uws:result id="2014-03-03T15:42:31:1337" xlink:href="http://www.cosmosim.org/query/index/stream/table/2014-03-03T15%3A42%3A31%3A1337/format/csv" xlink:type="simple"/>
</uws:results>
</uws:job>

我想在这里提取xlink:href网址。如您所见,uws:result标记不需要结束标记。另外,使用'uws:'使得在python中工作时处理它们有点棘手。这是我到目前为止所尝试的内容:

from lxml import etree
root = etree.fromstring(xmlresponse.content)
url = root.find('{*}results').text

其中xmlresponse.content是要解析的xml数据。返回的是

'\n    '

表示它只找到换行符,因为我真正追求的是包含在结果标记内的标记内。任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:1)

你找到了正确的节点;您错误地提取了数据。而不是

url = root.find('{*}results').text

你真的想要

url = root.find('{*}results').get('attribname', 'value_to_return_if_not_present')

url = root.find('{*}results').attrib['attribname']

(如果不存在则抛出异常)。

由于属性本身的命名空间,您可能需要使用{ns}attrib语法来查找它。

您可以转储attrib字典,也可以复制属性名称。

text实际上是元素之间的空间,并且通常不会被使用,但是对于间距(如etreeindent)和某些特殊情况都支持。