我有相當複雜的XML這樣的工作的工作:LXML與命名空間
<?xml version="1.0" encoding="UTF-8"?>
<!-- ***** Configuration Data exported at 20160623T110335 ***** -->
<impex:ExportData xmlns:impex="urn:swift:saa:xsd:impex">
<!-- *** Exported Data for Operator *** -->
<OperatorData xmlns="urn:swift:saa:xsd:impex:operator">
<ns2:OperatorDefinition xmlns="urn:swift:saa:xsd:operatorprofile" xmlns:ns2="urn:swift:saa:xsd:impex:operator" xmlns:ns3="urn:swift:saa:xsd:unit" xmlns:ns4="urn:swift:saa:xsd:licenseddestination" xmlns:ns5="urn:swift:saa:xsd:operator" xmlns:ns6="urn:swift:saa:xsd:authenticationservergroup">
<ns2:Operator>
<ns5:Identifier>
<ns5:Name>jdoe</ns5:Name>
</ns5:Identifier>
<ns5:Description>John Doe</ns5:Description>
<ns5:OperatorType>HUMAN</ns5:OperatorType>
<ns5:AuthenticationType>LDAP</ns5:AuthenticationType>
<ns5:AuthenticationServerGroup>
<ns6:Type>LDAP</ns6:Type>
<ns6:Name>LDAP_GROUP1</ns6:Name>
</ns5:AuthenticationServerGroup>
<ns5:LdapUserId>jdoe</ns5:LdapUserId>
<ns5:Profile>
<Name>DEV Users</Name>
</ns5:Profile>
<ns5:Unit>
<ns3:Name>None</ns3:Name>
</ns5:Unit>
</ns2:Operator>
</ns2:OperatorDefinition>
</OperatorData>
</impex:ExportData>
在這個XML有許多<ns2:OperatorDefinition>
元素像我包括在內。我很難理解如何使用lxml提取類似<ns5:Description>
的東西。所有我找到的命名空間的例子都不是這個複雜的。
我想只需找到做這樣的事情的標籤 -
from lxml import etree
doc = etree.parse('c:/robin/Operators_out.xml')
r = doc.xpath('/x:OperatorData/ns2:OperatorDefinition', namespaces={'x': 'urn:swift:saa:xsd:impex:operator'})
print len(r)
print r[0].text
print r[0].tag
我得到Undefined namespace prefix
。
由於您尚未在'namespaces'字典中包含'ns2'前綴的定義,因此您會得到「未定義的命名空間前綴」。 – mzjn