【python】lxml处理命名空间

有如下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

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

时间: 2024-12-11 05:26:35

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

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

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

python笔记:windows 下安装 python lxml

原文:http://blog.csdn.net/zhaokuo719/article/details/8209496 windows 环境下安装 lxml python 1.首先保证你的python 环境安装完善 2.把http://peak.telecommunity.com/dist/ez_setup.py 文件下载到电脑上 3.打开运行 cmd  执行:python ez_setup.py 4.安装完毕 ,PATH环境变量里面添加路径:如:E:\python27\Scripts(E:\py

python lxml install

之前记得安装libxslt和libxml yum install libxml* -yyum install libxslt* -y wget http://lxml.de/files/lxml-3.1.2.tgztar xzvf lxml-3.1.2.tgzcd lxml-3.1.2python setup.py buildpython setup.py install cd .. #验证是否安装成功shell > python>>> import lxml

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

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

python初学者笔记——命名空间

对于初学者而言,闭包的概念一直都是很难理解的. 我在学习的时候,网上查了那么多资料,依然是一知半解. 直到后来我看了这篇文章:http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/ 这是一篇很好的文章,由浅入深的告诉你到底闭包,装饰器都是什么东西. E文不过关?没关系,我来用我自己的理解和你们聊聊命名空间.闭包和装饰器的那些事儿. 前提: 阅读这篇文章的前提,是你要对Python,有基础的理解,如果你有兴趣

python之函数命名空间和作用域

命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 python代码运行的时候遇到函数是怎么做的 从python解释器开始执行之后,就在内存中开辟了一个空间,每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来.但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心 ---------代码在运行伊始,创建的存储"变量名与值的关系"的空间叫做全局命名空间 等执行到函数调用的时候,python解释

python进阶之命名空间与作用域

python进阶内功篇 命名空间和作用域 命名空间 Namespace Namespace命名空间,命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值.命名空间的一大作用是避免名字冲突. python使用命名空间记录变量的轨迹.python中有三个命名空间: 命名空间 名称 记录数据 函数的命名空间 局部命名空间 (local namespace) 记录了函数的参数和局部定义的变量 模块的命名空间 全局命名空间 (global namespace) 记录了模块的

Python 作用域和命名空间

Python Scopes and Namespaces A namespace is a mapping from names to objects. 命名空间是一个从名字到对象的映射(指向,明确的路径). Most namespaces are currently implemented as Python dictionaries. 大部分都是由字典dict(其他语言也称为hash)实现. 例子: the set of built-in names .放置内置函数的集合.模块中的全局名称:

Python(56)_命名空间和作用域

1  全局命名空间 a = 1 def fun(): print(a) fun() 原文地址:https://www.cnblogs.com/sunnybowen/p/10247259.html