lxml只获取前缀然后返回元素名称

时间:2017-03-20 23:27:23

标签: python xml web-scraping lxml

我需要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'"

谢谢!

1 个答案:

答案 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