我需要lxml做两件事: 1)列出xml文件中使用的所有各种前缀; 2)在指定前缀后,让lxml返回给我所有元素名称的多个属性。
对于这个lxml:
<pref:MiscDetails contentRef='01-01_2016' misc='wha'>1000</pref:MiscDetails>
<pref:TestingThis contentRef='03-02_2017' misc='t' qual='5'>50</pref:TestingThis>
<pref:AnotherExample contentRef='01-01_2015' misc='x'>100000</pref:AnotherExample>
<test:AFinalExample contentRef='' te='t'>test</test:AFinalExample>
代码首先要告诉我这个文件中的前缀是“pref”和“test”,然后我希望代码列出与“pref”相关的元素名称及其属性,然后“test”。 / p>
输出1:
"Listing prefixes:"
"pref"
"test"
输出2:
"Listing the prefix 'pref' element names and their attributes:"
"Element MiscDetails with attributes contentRef='01-01_2016' misc='wha'"
"Element TestingThis with attributes contentRef='03-02_2017' misc='t' qual='5'"
"Element AnotherExample with attributes contentRef='01-01_2015' misc='x'"
"Listing the prefix 'test' element names and their attributes:"
"Element AFinalExample with attributes contentRef='' te='t'"
谢谢!
答案 0 :(得分:1)
文档或元素上的>>> from lxml import etree
>>> doc = etree.fromstring("""<doc xmlns:pref='http://example.com'>
<pref:MiscDetails>...</pref:MiscDetails></doc>""")
>>> doc.nsmap
{'pref': 'http://example.com'}
属性将列出任何名称空间前缀:
iter()
使用{namespace-uri}*
和>>> doc = etree.fromstring("<doc xmlns:pref='http://example.com'>
<pref:foo/><pref:bar/></doc>")
>>> [ el.tag for el in doc.iter('{http://example.com}*') ]
['{http://example.com}foo', '{http://example.com}bar']
来返回该命名空间中的所有元素(你必须在这里使用URI,这是命名空间的有意义部分,而不是前缀,这只是对人类的一种便利):
{{1}}
lxml文档中的更多信息:http://lxml.de/tutorial.html#namespaces