python中的Atom feed(XML)解析[重复]

Posted

技术标签:

【中文标题】python中的Atom feed(XML)解析[重复]【英文标题】:Atom feed (XML) parsing in python [duplicate] 【发布时间】:2013-09-21 19:21:54 【问题描述】:

在我的 python 程序中,我进行了一次休息调用,并得到以下输出。

<?xml version="1.0" encoding="UTF-8"?>
<!--This is to override browser formatting; see server.conf[httpServer] to disable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->
<?xml-stylesheet type="text/xml" href="/static/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:s="http://dev.myweb.com/ns/rest" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
  <title>ABC</title>
  <id>123ABC</id>
  <updated>2013-09-05T12:34:51+05:30</updated>
  <author>
    <name>itsme</name>
  </author>
  <s:messages/>
  <entry>
    <title>ABC1</title>
    <id>123ABC123/id>
    <updated>2013-09-05T12:34:51+05:30</updated>
    <author>
      <name>itsyou</name>
    </author>
    <content type="text/xml">
      <s:dict>
        <s:key name="creation_time">1372890070</s:key>
        <s:key name="A:a"><s:dict><s:key name="app"></s:key><s:key name="can_list">1</s:key><s:key name="can_write">1</s:key><s:key name="modifiable">0</s:key><s:key name="owner">itsyou</s:key><s:key name="perms"><s:dict><s:key name="read"><s:list><s:item>admin</s:item></s:list></s:key><s:key name="write"><s:list><s:item>admin</s:item></s:list></s:key></s:dict></s:key><s:key name="removable">0</s:key><s:key name="sharing">system</s:key></s:dict></s:key>
        <s:key name="expiration_time">1404426070</s:key>
        <s:key name="features"><s:list><s:item>A</s:item><s:item>B</s:item><s:item>C</s:item><s:item>D</s:item><s:item>E</s:item><s:item>F</s:item><s:item>G</s:item><s:item>H</s:item><s:item>I</s:item><s:item>J</s:item><s:item>K</s:item><s:item>L</s:item><s:item>M</s:item><s:item>N</s:item><s:item>O</s:item></s:list></s:key>
        <s:key name="group_id">MAC</s:key>
        <s:key name="label">NOT FOR RESALE</s:key>
        <s:key name="max_violations">5</s:key>
        <s:key name="quota">1000000000</s:key>
        <s:key name="relative_expiration_interval">0</s:key>
        <s:key name="relative_expiration_start">0</s:key>
        <s:key name="sourcetypes"><s:list/></s:key>
        <s:key name="stack_id">mac</s:key>
        <s:key name="status">VALID</s:key>
        <s:key name="type">mac</s:key>
        <s:key name="window_period">30</s:key>
      </s:dict>
    </content>
  </entry>
  <entry>
    -----------
  </entry>
  <entry>
    ----------
  </entry>
  <entry>
    ---------
  </entry>
</feed>

我只对字段 1000000000 感兴趣

我在***上浏览了关于xml解析的类似问题,然后我也在google中搜索,我没有找到任何解决方案。

我阅读了 python 文档——[http://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.XML]

并尝试使用函数 findall()、iterfind() 构建一些逻辑......似乎没有任何效果。

如何从上述原子提要 (xml) 中提取配额字段。

请注意,我尝试了 ElementTree 的解析函数,但出现错误。我不能使用那个功能。我得到来自 restAPI 的响应作为提要。我可以将其保存为文件然后解析它。

提前致谢

【问题讨论】:

我无法使用 ElementTree 的解析功能。这对我来说不是磁盘上的文件。这是来自 restAPI 的响应。我不允许将其保存为文件并解析提要。 【参考方案1】:
from scrapy.selector import XmlXPathSelector

xml = \
"""
    <content type="text/xml">
      <s:dict>
        <s:key name="group_id">MAC</s:key>
        <s:key name="label">NOT FOR RESALE</s:key>
        <s:key name="max_violations">5</s:key>
        <s:key name="quota">1000000000</s:key>
        <s:key name="relative_expiration_interval">0</s:key>
        <s:key name="relative_expiration_start">0</s:key>
        <s:key name="sourcetypes"><s:list/></s:key>
        <s:key name="stack_id">mac</s:key>
        <s:key name="status">VALID</s:key>
        <s:key name="type">mac</s:key>
        <s:key name="window_period">30</s:key>
      </s:dict>
    </content>
"""

xxs = XmlXPathSelector(text=xml)
quota = xxs.select('//*[@name="quota"]/text()').extract()[0]
print quota

【讨论】:

以上是关于python中的Atom feed(XML)解析[重复]的主要内容,如果未能解决你的问题,请参考以下文章

DOMDocument无法解析XML

在Ruby / Rails中解析Atom和RSS?

Python中的RSS提要解析器库[关闭]

知名RSS订阅

知名RSS订阅

知名RSS订阅