1

In my python program, i make a rest call and i get the following output.

<?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>

I am interested only in the field 1000000000

I browsed the stackoverflow for similar questions on xml parsing and then i also searched in google, i did not find any solution.

I read python docs -- [http://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.XML]

and tried to frame some logic using the functions findall(), iterfind() ... Nothing seems to work.

How to extract quota field from the above atom feed (xml).

Please note, i tried ElementTree's parse function, i got an error. I can not use that function. I get the response from restAPI as feed. I am allowed to save it as file and then parse it.

Thanks in advance

1
  • I can not use ElementTree's parse function. This is not a file on disk for me. This is response from restAPI. I am not allowed to save it as file and the parse the feed. Commented Sep 17, 2013 at 19:33

1 Answer 1

0
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
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.