我有以下XML文件:
<root>
<scene name="scene1">
<view ath="0" atv="10"/>
<image url="img1.jgp"/>
<hotspot name="hot1"/>
</scene>
<scene name="scene2">
<view ath="20" atv="10"/>
<image url="img2.jgp"/>
<hotspot name="hot2"/>
</scene>
</root>
我正在使用lxml包编写一个Python脚本,以获取scene1
内的整个view
标记。即:
我已经阅读了lxml文档,但是我能找到的只是如何获取标记、其属性或内容,而不是整个标记。在
至少有人能给我指出正确的方向吗?lxml是否有实现这一点的函数或方法?在
谢谢
拉斐尔
XML内容是这样一个字符串:
您可以解析一个文件;但是,在这里,我解析一个StringIO:
^{pr2}$所有内容都加载在
ElementTree
中。在要查找视图,我使用XPath表达式:
结果总是一个列表:
您将获得:
您的给定XML源包含一些错误;我修复了这些错误,请参阅下面的源代码:
要解析此源,您将创建一个etree:
^{pr2}$(对于来自文件的源,请改用
etree.parse()
。)现在,您可以通过正确访问
tree
来浏览已解析的XML。我最喜欢的方法是使用xpath导航(掌握这些超出了您的问题范围):这将打印XPath找到的每个视图标记的所有XML属性:
当然,您也可以访问视图元素的其他属性,比如它们的嵌入文本(这里当然是空的)或它们的子元素(子元素)(当然,在您的示例中它们也没有子元素)。在
您的问题的措辞表明您可能没有建立起这样一个事实的理解,即这个
view
对象确实是“整个视图标记”。您可以向view
对象请求它所组成的标记(view
)、属性(见上文)、内容(view.text
)甚至子元素(view.getchildren()
,但没有)。在您可以通过调用
etree.tostring(view)
将已解析的XML结构转换回ASCII表示;这将返回一个类似'<view ath="20" atv="10"/>\n '
的字符串。在大多数情况下,你不会这样做。在您还可以访问元素查看元素的子元素:
这将打印
tree
元素的第一个子元素(aview
)的第0个子元素(aview
)的XML属性:相关问题 更多 >
编程相关推荐