如何在python中解析xml? [英] How to parse xml in python ?

查看:186
本文介绍了如何在python中解析xml?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须从XML文档中提取`friendlyName`.

这是我当前的解决方案:

根= ElementTree.fromstring(urllib2.urlopen(XMLLocation).read())
用于root.iter(''{urn:schemas-upnp-org:device-1-0} friendlyName'')中的孩子:
返回child.text


我有什么更好的方法可以做到这一点(也许其他不涉及迭代的方法)?我可以使用XPath吗?

XML内容:

<!-语言:lang-xml->


< root xmlns ="urn:schemas-upnp-org:device-1-0">
< specversion>
< major> 1
<未成年人> 0

< device>
< dlna:x_dlnadoc xmlns:dlna ="urn:schemas-dlna-org:device-1-0"> DMR-1.50
< devicetype> urn:schemas-upnp-org:device:MediaRenderer:1
< friendlyname>我的产品912496
<制造商>嵌入式
< manufacturerurl> http://www.embedded.com
<型号说明>产品
<型号名称>产品
< modelnumber>
< modelurl> http://www.embedded.com
< udn> uuid:93b2abac-cb6a-4857-b891-002261912496
< servicelist>
< service>
< servicetype> urn:schemas-upnp-org:service:ConnectionManager:1
< serviceid> urn:upnp-org:serviceId:ConnectionManager
< scpdurl>/xml/ConnectionManager.xml
< eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelSinkConnectionManager
< controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelSinkConnectionManager

< service>
< servicetype> urn:schemas-upnp-org:service:AVTransport:1
< serviceid> urn:upnp-org:serviceId:AVTransport
< scpdurl>/xml/AVTransport2.xml
< eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelAVTransport
< controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelAVTransport

< service>
< servicetype> urn:schemas-upnp-org:service:RenderingControl:3
< serviceid> urn:upnp-org:serviceId:RenderingControl
< scpdurl>/xml/RenderingControl2.xml
< eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelRenderingControl
< controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelRenderingControl

< service>
< servicetype> urn:schemas-embedded-com:service:RTSPGateway:1
< serviceid> urn:embedded-com:serviceId:RTSPGateway
< scpdurl>/xml/RTSPGateway.xml
< eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelRTSPGateway
< controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelRTSPGateway

< service>
< servicetype> urn:schemas-embedded-com:service:SpeakerManagement:1
< serviceid> urn:embedded-com:serviceId:SpeakerManagement
< scpdurl>/xml/SpeakerManagement.xml
< eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelSpeakerManagement
< controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelSpeakerManagement

< service>
< servicetype> urn:schemas-embedded-com:service:NetworkManagement:1
< serviceid> urn:embedded-com:serviceId:NetworkManagement
< scpdurl>/xml/NetworkManagement.xml
< eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelNetworkManagement
< controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelNetworkManagement


< iconlist>
< icon>
< mimetype> image/png
< width> 120
< height> 120
< depth> 32
< url>/org.mpris.MediaPlayer2.mansion-120x120x32.png

< icon>
< mimetype> image/png
< width> 48
< height> 48
< depth> 32
< url>/org.mpris.MediaPlayer2.mansion-48x48x32.png

< icon>
< mimetype> image/jpeg
< width> 120
< height> 120
< depth> 24
< url>/org.mpris.MediaPlayer2.mansion-120x120x24.jpg

< icon>
< mimetype> image/jpeg
< width> 48
< height> 48
< depth> 24
< url>/org.mpris.MediaPlayer2.mansion-48x48x24.jpg


< x_embeddeddevice xmlns:edd ="schemas-embedded-com:extended-device-description">
< firmwareversion> v1.0(4.155.1.15.002)
<功能>
<功能>
< name> com.sony.Product
< version> 1.0.0

<功能>
< name> com.sony.Product.btmrc
< version> 1.0.0

<功能>
< name> com.sony.Product.btmrs
< version> 1.0.0




I have to extract `friendlyName` from the XML document.

Here''s my current solution:

root = ElementTree.fromstring(urllib2.urlopen(XMLLocation).read())
for child in root.iter(''{urn:schemas-upnp-org:device-1-0}friendlyName''):
return child.text


I there any better way to do this (maybe any other way which does not involve iteration)? Could I use XPath?

XML content:

<!-- language: lang-xml -->


<root xmlns="urn:schemas-upnp-org:device-1-0">
<specversion>
<major>1
<minor>0

<device>
<dlna:x_dlnadoc xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50
<devicetype>urn:schemas-upnp-org:device:MediaRenderer:1
<friendlyname>My Product 912496
<manufacturer>embedded
<manufacturerurl>http://www.embedded.com
<modeldescription>Product
<modelname>Product
<modelnumber>
<modelurl>http://www.embedded.com
<udn>uuid:93b2abac-cb6a-4857-b891-002261912496
<servicelist>
<service>
<servicetype>urn:schemas-upnp-org:service:ConnectionManager:1
<serviceid>urn:upnp-org:serviceId:ConnectionManager
<scpdurl>/xml/ConnectionManager.xml
<eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelSinkConnectionManager
<controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelSinkConnectionManager

<service>
<servicetype>urn:schemas-upnp-org:service:AVTransport:1
<serviceid>urn:upnp-org:serviceId:AVTransport
<scpdurl>/xml/AVTransport2.xml
<eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelAVTransport
<controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelAVTransport

<service>
<servicetype>urn:schemas-upnp-org:service:RenderingControl:3
<serviceid>urn:upnp-org:serviceId:RenderingControl
<scpdurl>/xml/RenderingControl2.xml
<eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelRenderingControl
<controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelRenderingControl

<service>
<servicetype>urn:schemas-embedded-com:service:RTSPGateway:1
<serviceid>urn:embedded-com:serviceId:RTSPGateway
<scpdurl>/xml/RTSPGateway.xml
<eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelRTSPGateway
<controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelRTSPGateway

<service>
<servicetype>urn:schemas-embedded-com:service:SpeakerManagement:1
<serviceid>urn:embedded-com:serviceId:SpeakerManagement
<scpdurl>/xml/SpeakerManagement.xml
<eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelSpeakerManagement
<controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelSpeakerManagement

<service>
<servicetype>urn:schemas-embedded-com:service:NetworkManagement:1
<serviceid>urn:embedded-com:serviceId:NetworkManagement
<scpdurl>/xml/NetworkManagement.xml
<eventsuburl>/Event/org.mpris.MediaPlayer2.mansion/RygelNetworkManagement
<controlurl>/Control/org.mpris.MediaPlayer2.mansion/RygelNetworkManagement


<iconlist>
<icon>
<mimetype>image/png
<width>120
<height>120
<depth>32
<url>/org.mpris.MediaPlayer2.mansion-120x120x32.png

<icon>
<mimetype>image/png
<width>48
<height>48
<depth>32
<url>/org.mpris.MediaPlayer2.mansion-48x48x32.png

<icon>
<mimetype>image/jpeg
<width>120
<height>120
<depth>24
<url>/org.mpris.MediaPlayer2.mansion-120x120x24.jpg

<icon>
<mimetype>image/jpeg
<width>48
<height>48
<depth>24
<url>/org.mpris.MediaPlayer2.mansion-48x48x24.jpg


<x_embeddeddevice xmlns:edd="schemas-embedded-com:extended-device-description">
<firmwareversion>v1.0 (4.155.1.15.002)
<features>
<feature>
<name>com.sony.Product
<version>1.0.0

<feature>
<name>com.sony.Product.btmrc
<version>1.0.0

<feature>
<name>com.sony.Product.btmrs
<version>1.0.0




推荐答案

建议您为此使用python文档

https://docs.python.org/2/library/xml.etree.elementtree.html [^ ]


祝一切顺利:)
Suggest you to refer python documentation for this

https://docs.python.org/2/library/xml.etree.elementtree.html[^]


All the best:)


这篇关于如何在python中解析xml?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆