正在用空命名空间解析 xml
Parsing xml with empty namespace
我使用lxml
解析格式良好的xml:
<search-results xmlns="http://www.w3.org/2005/Atom"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:prism="http://prismstandard.org/namespaces/basic/2.0/"
xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<opensearch:totalResults>0</opensearch:totalResults>
<opensearch:startIndex>0</opensearch:startIndex>
<opensearch:itemsPerPage>0</opensearch:itemsPerPage>
<entry>
<error>Result set was empty</error>
</entry>
</search-results>
我对里面的文字感兴趣error
。
我正在使用以下代码:
from lxml import etree
doc = etree.fromstring(xml) # xml is above xml
ns = {'opensearch': "http://a9.com/-/spec/opensearch/1.1/"}
print doc.xpath('//opensearch:totalResults', namespaces=ns)[0].text
可以很好地获得 0
,但是我应该为 <entry>
做什么,它似乎不在命名空间中?我尝试添加空命名空间,我认为它与 "http://www.w3.org/2005/Atom"
:
ns = {'opensearch': "http://a9.com/-/spec/opensearch/1.1/", 'empty': "http://www.w3.org/2005/Atom"}
print doc.xpath('//entry/error', namespaces=ns)[0].text
但这会导致 IndexError
,因为没有列表。
您需要使用您为表达式中的空命名空间指定的 empty
别名:
ns = {'opensearch': "http://a9.com/-/spec/opensearch/1.1/", 'empty': "http://www.w3.org/2005/Atom"}
print doc.xpath('//empty:entry/empty:error', namespaces=ns)[0].text
我使用lxml
解析格式良好的xml:
<search-results xmlns="http://www.w3.org/2005/Atom"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:prism="http://prismstandard.org/namespaces/basic/2.0/"
xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<opensearch:totalResults>0</opensearch:totalResults>
<opensearch:startIndex>0</opensearch:startIndex>
<opensearch:itemsPerPage>0</opensearch:itemsPerPage>
<entry>
<error>Result set was empty</error>
</entry>
</search-results>
我对里面的文字感兴趣error
。
我正在使用以下代码:
from lxml import etree
doc = etree.fromstring(xml) # xml is above xml
ns = {'opensearch': "http://a9.com/-/spec/opensearch/1.1/"}
print doc.xpath('//opensearch:totalResults', namespaces=ns)[0].text
可以很好地获得 0
,但是我应该为 <entry>
做什么,它似乎不在命名空间中?我尝试添加空命名空间,我认为它与 "http://www.w3.org/2005/Atom"
:
ns = {'opensearch': "http://a9.com/-/spec/opensearch/1.1/", 'empty': "http://www.w3.org/2005/Atom"}
print doc.xpath('//entry/error', namespaces=ns)[0].text
但这会导致 IndexError
,因为没有列表。
您需要使用您为表达式中的空命名空间指定的 empty
别名:
ns = {'opensearch': "http://a9.com/-/spec/opensearch/1.1/", 'empty': "http://www.w3.org/2005/Atom"}
print doc.xpath('//empty:entry/empty:error', namespaces=ns)[0].text