有如下xml

<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

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

可以看到,获取属性时,不需要加命名空间,直接获取即可

【python】lxml处理命名空间的更多相关文章

  1. 九. Python基础(9)--命名空间, 作用域

    九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...

  2. 13.Python中的命名空间是什么

    Python中的命名空间是什么? In Python,every name introduced has a place where it lives and can be hooked for. T ...

  3. python lxml库生成xml文件-节点命名空间问题

    lxml库,处理xml很强大,官方文档:https://lxml.de/tutorial.html#namespaces 例如: 我们要生成如下格式的报文: <ttt:jesson xmlns: ...

  4. python笔记:windows 下安装 python lxml

    原文:http://blog.csdn.net/zhaokuo719/article/details/8209496 windows 环境下安装 lxml python 1.首先保证你的python ...

  5. python lxml install

    之前记得安装libxslt和libxml yum install libxml* -yyum install libxslt* -y wget http://lxml.de/files/lxml-3. ...

  6. Windows下安装Python lxml库(无废话版)

    python官网:python-2.7.12.amd64.msihttps://pypi.python.org/pypi/setuptools:setuptools-28.6.0.zipsetupto ...

  7. Python 类的命名空间

    Python中类的定义其实就是执行代码块: class cc: a=0 print '+++++', print a 会直接执行print语句而不是在实例化cc时执行.执行后会生成对应的类的命名空间. ...

  8. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  9. python作用域与命名空间

    什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就 ...

随机推荐

  1. IGV软件

    它支持各种各样的数据类型,包括基于芯片测序.二代测序数据和基因组注释数据等.整合基因组浏览器(IGV,Integrative Genomics Viewer)进行可视化浏览,它支持各种各式的数据类型, ...

  2. winServer2003除默认端口外的其他端口只能本地访问,关闭防火墙即可

    winServer2003除默认端口外的其他端口只能本地访问,关闭防火墙即可

  3. QT编写上位机程序一定要初始化变量以及谨慎操作指针

    背景: 在编写QT上位机界面时,界面在运行的时候经常出现卡死或者直接挂掉的怪现象. 正文: 上位机有个函数为check_receive():该函数的作用为定时调用循环检测USB是否有数据.若有,则将信 ...

  4. Swift2.1 语法指南——可空链式调用

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  5. CPU核数跟多线程的关系

    一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的? 今天就这一问题查了一些资料,现整理如下: 要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键 ...

  6. css position:absolute 如何居中对齐

    写死宽度,就好弄了 position: absolute;left: 50%;width: 980px;margin-left: -490px; text-algin:center

  7. Unity调用Android方法

    步骤 废话不多说,直接来步骤吧1.创建工程,弄大概像这样一个界面2.在unity中写好代码,像这样,记得给界面绑定好事件啥的 using UnityEngine; using UnityEngine. ...

  8. 剑指Offer 从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的“新链表”的表头 思路: 用容器vector,递归到最后一个元素,push_back到 ...

  9. WebStorm设置左侧菜单栏背景色和样式

    WebStrom一直以来都是默认的白色主题,今天想修改了下主题皮肤,结果导致左侧项目资源栏和顶部菜单栏也变成了黑色,结果无法改变回来,网上查了各种帖子,居然也没找到解决方法,自己研究了半天,终于搞定了 ...

  10. 18.1---不用加号的加法(CC150)

    1,自己写的又长又臭的代码,也能AC,但是太丑了.主要是通过二进制来算. public static int addAB(int a, int b){ int res = 0; String str1 ...