在标签上解析带有前缀的.xml? xml.etree.ElementTree

时间:2011-10-31 01:02:12

标签: python xml xml.etree

我可以读取标签,除非有前缀。我没有运气搜索上一个问题。

我需要阅读media:content。我试过了image = node.find("media:content")。 Rss输入:

<channel>
  <title>Popular  Photography in the last 1 week</title>
  <item>
    <title>foo</title>
    <media:category label="Miscellaneous">photography/misc</media:category>
    <media:content url="http://foo.com/1.jpg" height="375" width="500" medium="image"/>
  </item>
  <item> ... </item>
</channel>

我可以阅读兄弟标记title

from xml.etree import ElementTree
with open('cache1.rss', 'rt') as f:
    tree = ElementTree.parse(f)

for node in tree.findall('.//channel/item'):
    title =  node.find("title").text 

我一直在使用这些文档,但却停留在“前缀”部分。

2 个答案:

答案 0 :(得分:4)

以下是使用 ElementTree

的XML命名空间的示例
>>> x = '''\
<channel xmlns:media="http://www.w3.org/TR/html4/">
  <title>Popular  Photography in the last 1 week</title>
  <item>
    <title>foo</title>
    <media:category label="Miscellaneous">photography/misc</media:category>
    <media:content url="http://foo.com/1.jpg" height="375" width="500" medium="image"/>
  </item>
  <item> ... </item>
</channel>
'''
>>> node = ElementTree.fromstring(x)
>>> for elem in node.findall('item/{http://www.w3.org/TR/html4/}category'):
        print elem.text


photography/misc

答案 1 :(得分:0)

media是一个XML命名空间,必须先使用xmlns:media="..."在某处定义。有关如何在lxml中定义用于XPath表达式的xml命名空间,请参阅http://lxml.de/xpathxslt.html#namespaces-and-prefixes