【python】lxml处理命名空间
2016-10-12 18:26
344 查看
有如下xml
其中的xmlns属性表示的是该xml的默认命名空间,该命名空间必须是一个url形式
查看xml的tag
结果为:
可以看到,跟普通xml的tag相比每个tag前面都多出了一个命名空间
获取命名空间 .nsmap
结果
<A xmlns="http://This/is/a/namespace"> <B>dataB1</B> <B>dataB2</B> <B> <C>dataC</C> </B> </A>
其中的xmlns属性表示的是该xml的默认命名空间,该命名空间必须是一个url形式
查看xml的tag
#encoding=utf8
from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace"> <B>dataB1</B> <B>dataB2</B> <B> <C>dataC</C> </B> </A>
"""
xml = etree.fromstring(str_xml)
for node in xml.iter():
print node.tag
结果为:
{http://This/is/a/namespace}A {http://This/is/a/namespace}B {http://This/is/a/namespace}B {http://This/is/a/namespace}B {http://This/is/a/namespace}C
可以看到,跟普通xml的tag相比每个tag前面都多出了一个命名空间
获取命名空间 .nsmap
from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace"> <B>dataB1</B> <B>dataB2</B> <B> <C>dataC</C> </B> </A>
"""
xml = etree.fromstring(str_xml)
ns = xml.nsmap
print ns
print ns[None]
结果
{None: 'http://This/is/a/namespace'} http://This/is/a/namespace[/code]
ns[None]获取的是默认命名空间,ns会显示所有的命名空间
获取有命名空间的节点内容from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace"> <B>dataB1</B> <B>dataB2</B> <B> <C>dataC</C> </B> </A>
"""
xml = etree.fromstring(str_xml)
ns = xml.nsmap[None]
ns = "{%s}" % ns
for item in xml.findall("{0}B/{0}C".format(ns)): #不能用xpath会出错
print item.text
结果dataC
注意,在查找节点时,每一级节点都需要加上命名空间。而且测试时发现,findall可以正常查找到信息,而xpath会报错。
获取带命名空间节点的属性值from lxml import etree str_xml = """ <A xmlns="http://This/is/a/namespace"> <B b="123">dataB1</B> <B>dataB2</B> <B> <C>dataC</C> </B> </A> """ xml = etree.fromstring(str_xml) ns = xml.nsmap[None] ns = "{%s}" % ns item = xml.find(ns+"B") print item.get("b") print item.text
结果123 dataB1
可以看到,获取属性时,不需要加命名空间,直接获取即可
相关文章推荐
- 文件处理-IO命名空间中的类
- 当xml中存在命名空间,三种处理办法(dom4j)
- Visual Studio 目标框架造成 命名空间“Microsoft”中不存在类型或命名空间名称“Crm”。是否缺少程序集引用中错误的处理
- dom4j中通过xpath处理带命名空间的XML文件
- 学习笔记之C#parm、命名空间、字符串处理
- net处理有命名空间的xml文件的方法
- Visual Studio 目标框架造成 命名空间“Microsoft”中不存在类型或命名空间名称“Crm”。是否缺少程序集引用中错误的处理
- 在jquery中处理带有命名空间的XML数据
- 在jquery中处理带有命名空间的XML数据
- C#学习笔记(五)中级 方法的重载,参数,继承和多态,异常处理,命名空间,接口,泛型
- XML中处理带有命名空间的XPath查询
- Flex中处理带命名空间的XML
- xml处理命名空间
- DOM4J处理XML带有命名空间的四种方法
- python 简单图像处理(11) 空间域图像锐化(边缘检测)
- 当xml中存在命名空间,三种处理办法(dom4j)
- C#处理带命名空间的XML
- 当 xml中存在命名空间,三种处理办法(dom4j)
- GDI+图形(图像)处理及常用类库和命名空间
- C#文件处理-System.IO 命名空间常用的类