我正在嘗試遍歷Google XML來檢索大約6個字段。我使用Google提供的gdata爲我的Google Apps域中的用戶配置文件提取XML提要。這是結果:從XML中檢索數據python
<?xml version="1.0"?>
-<ns0:feed ns1:etag="W/"LIESANDCRAPfyt7I2A9WhHERE."" xmlns:ns4="http://www.w3.org/2007/app" xmlns:ns3="http://schemas.google.com/contact/2008" xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:ns1="http://schemas.google.com/g/2005" xmlns:ns0="http://www.w3.org/2005/Atom">
<ns0:updated>2012-01-25T14:52:12.867Z</ns0:updated>
<ns0:category term="http://schemas.google.com/contact/2008#profile" scheme="http://schemas.google.com/g/2005#kind"/>
<ns0:id>domain.com</ns0:id>
<ns0:generator version="1.0" uri="http://www.google.com/m8/feeds">Contacts</ns0:generator>
<ns0:author>
<ns0:name>domain.com</ns0:name>
</ns0:author>
<ns0:link type="text/html" rel="alternate" href="http://www.google.com/"/>
<ns0:link type="application/atom+xml" rel="http://schemas.google.com/g/2005#feed" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full"/>
<ns0:link type="application/atom+xml" rel="http://schemas.google.com/g/2005#batch" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/batch"/>
<ns0:link type="application/atom+xml" rel="self" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full?max-results=300"/>
<ns2:startIndex>1</ns2:startIndex>
<ns2:itemsPerPage>300</ns2:itemsPerPage>
<ns0:entry ns1:etag=""CRAPQR4KTit7I2A4"">
<ns0:category term="http://schemas.google.com/contact/2008#profile" scheme="http://schemas.google.com/g/2005#kind"/>
<ns0:id>http://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson</ns0:id>
<ns1:name>
<ns1:familyName>Person</ns1:familyName>
<ns1:fullName>Name Person</ns1:fullName>
<ns1:givenName>Name</ns1:givenName>
</ns1:name>
<ns0:updated>2012-01-25T14:52:13.081Z</ns0:updated>
<ns1:organization rel="http://schemas.google.com/g/2005#work" primary="true">
<ns1:orgTitle>JobField</ns1:orgTitle>
<ns1:orgDepartment>DepartmentField</ns1:orgDepartment>
<ns1:orgName>CompanyField</ns1:orgName>
</ns1:organization>
<ns3:status indexed="true"/>
<ns0:title>Name Person</ns0:title>
<ns0:link type="image/*" rel="http://schemas.google.com/contacts/2008/rel#photo" href="https://www.google.com/m8/feeds/photos/profile/domain.com/nperson"/>
<ns0:link type="application/atom+xml" rel="self" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson"/>
<ns0:link type="application/atom+xml" rel="edit" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson"/>
<ns1:email rel="http://schemas.google.com/g/2005#other" address="[email protected]"/>
<ns1:email rel="http://schemas.google.com/g/2005#other" primary="true" address="[email protected]"/>
<ns4:edited>2012-01-25T14:52:13.081Z</ns4:edited>
</ns0:entry>
<ns0:title>domain.com's Profiles</ns0:title>
</ns0:feed>
我試圖使用lxml的分析數據,但它不工作這麼好,這是我的代碼:
import atom
import gdata.auth
import gdata.contacts
import gdata.contacts.client
from lxml import etree
from lxml import objectify
email = '[email protected]'
password = 'password'
domain = 'domain.com'
gd_client = gdata.contacts.client.ContactsClient(domain=domain)
gd_client.ClientLogin(email, password, 'profileFeedAPI')
profiles_feed = gd_client.GetProfilesFeed('https://www.google.com/m8/feeds/profiles/domain/domain.com/full?max-results=300')
def PrintFeed(feed):
for i, entry in enumerate(feed.entry):
print '\n%s %s' % (i+1, entry.title.text)
print(profiles_feed)
PrintFeed(profiles_feed)
profiles_feed2=(str(profiles_feed))
root = objectify.fromstring(profiles_feed2)
print root
print root.tag
print root.text
for e in root.entry():
print e.tag
print e.text
我能得到這個回報飼料,然後進入,但我無法探索更遠的地方。 ALl我需要的是ns1名稱中的名稱字段和ns1組織中的org字段中的文本形式。我有點失落,所以任何幫助,非常感謝。
你面對的是什麼/錯誤問題,除了「有點失落」?另外,如果你只需要幾個字段,可以考慮SAX解析。 – Marcin
@marcin我面臨的問題是我無法得到我需要的領域,我不知道如何去做。 – Kevin
投票重新提出這個問題。基本問題是你沒有意識到命名空間。請參閱[使用名稱空間與lxml對象化](http://lxml.de/objectify.html#namespace-handling),或者執行相同的[使用xpath](http://lxml.de/xpathxslt.html#xpath) –