‘壹’ python 怎么预处理xml
ElementTree是python的XML处理模块,它提供了一个轻量级的对象模型。它在Python2.5以后成为Python标准库的一部分,但是Python2.4之前需要单独安装。在使用ElementTree模块时,需要import xml.etree.ElementTree的操作。
ElementTree表示整个XML节点树,而Element表示节点数中的一个单独的节点。
构建XML文件
ElementTree(tag),其中tag表示根节点,初始化一个ElementTree对象。
Element(tag, attrib={}, **extra)函数用来构造XML的一个根节点,其中tag表示根节点的名称,attrib是一个可选项,表示节点的属性。
SubElement(parent, tag, attrib={}, **extra)用来构造一个已经存在的节点的子节点
Element.text和SubElement.text表示element对象的额外的内容属性,Element.tag和Element.attrib分别表示element对象的标签和属性。
ElementTree.write(file, encoding='us-ascii', xml_declaration=None, default_namespace=None, method='xml'),函数新建一个XML文件,并且将节点数数据写入XML文件中。
‘贰’ 怎样优雅解决 python 解析 xml gb2312 编码的问题
你以二进制形式读入XML文件,读入到bytes类型对象中,然后bytes.decode传编码参数就能指定二进制数据的编码、转换为python内部使用的utf-8。
bytes.decode(encoding="gb2312")
‘叁’ python elementtree 生成包含<![CDATA[ ]]>的xml文件
http://stackoverflow.com/questions/174890/how-to-output-cdata-using-elementtree
‘肆’ 你好,我要是想通过python的ElementTree的XML接口实现xml的删除,修改,创建的功能该怎么编写。麻烦了。
from xml.etree.ElementTree import ElementTree
from lxml import etree ##的下载安装lxml的包
Class XMLData:
def readXML(self,xml_file):##xml_file为xml文件名
doc = etree.ElementTree(file=xml_file)
root = doc.getroot();
items = root.getchildren();
listctrldata = {};
index = 1;
for item in items:
itemchild = item.getchildren();
arr_name = [];
fot ic in intemchild:
if ic.text = None:
ic.text=''
arr_name.append(ic.text)
listctrldata[index] = arr_name
index+=1
return listctrldata
##修改xml
def write(self,xml_file,listctrldata):
doc = etree.ElementTree(file=xml_file)
root = doc.getroot()
listlen = len(listctrldata)
itemlen = len(root.getchilddren())
if itemlen > listlen:
for more in range(itemlen-listlen):
root.remove(root.getchildren()[0])
elif itemlen < listlen:
for less in range(listlen-itemlen):
item = root.getchildren()[0]
itemadd = etree.Element(item.tag)
for it in item.getchildren():
itadd = stree.Element(it.tag)
itemadd.append(itadd)
root.append(itemadd)
else:pass
j=1
for item in root.getchildren():
itemchild = item.getchildren()
k = 0
for ic in itemchild:
ic.text = listctrldata[j][k]
k+=1
j+=1
f = open(xml_file,"w")
f.write(etree.tostring(root,pretty-print = true))
f.close()
‘伍’ Python中的ElementTree入如何生成XML文档
方法:
minidom.parse(filename):加载读取XML文件
doc.documentElement:获取XML文档对象
node.getAttribute(AttributeName):获取XML节点属性值
node.getElementsByTagName(TagName):获取XML节点对象集合
node.childNodes :返回子节点列表。
node.childNodes[index].nodeValue:获取XML节点值
node.firstChild:访问第一个节点,等价于pagexml.childNodes[0]
返回Node节点的xml表示的文本:
doc = minidom.parse(filename)
doc.toxml('UTF-8')
访问元素属性:
Node.attributes["id"]
a.name #就是上面的 "id"
a.value #属性的值
‘陆’ 在python中用ElementTree提取XML中的内容
fromxml.etreeimportElementTree
str_=''#文件中的xml字符串
xml_obj=ElementTree.fromstring(str_)
然后通过对xml_obj进行操作,xml_obj本身也是一个xml节点。
xml_obj.getchildren() 获取根节点的子节点列表
xml_obj.findall(node_name) 搜索xml_obj节点下名为node_name的所有节点
xml_obj.tag 节点的标签
xml_obj.text 节点的文本信息 ,本例中可以获得K这个文本。
xml_obj.tail 节点尾部的文本信息,本例中获取Channel Regulator KCR1 Suppresses Heart Rhythm by Molating the Pacemaker Current I
就需要搜索到标签为sup的节点,然后取节点的tail文本获得。
‘柒’ Python问题
1,可以根据特殊符号分割字符串,复杂点的可以用正则表达式
>>>a='0916.exe'
>>>b=a.split('.') #按点好分割字符串
>>>b[0]
0916
>>>b[1]
exe
2,基本原理同第一题
>>>a='i love you'
>>>b=a.split(' ') #按空格分割字符串
>>>for x in b:
print(x)
i
love
you
3
a=10
for b in range(a):
....l=[]
........for c in range(a):
........l.append(str(a))
....print(' '.join(l))
4
这个问题我不是很明白,什么是特定范围,是指的WINDOWS中的CMD窗口中打印出的一行居中或者LINUX中终端居中,如果是我所说的意思的话,比较复杂,要调用特殊的函数获得终端行的大小,然后计算后输出
5
command是你要分析的字符串,len是大写字母的数量
len=0
for s in command:
....if 65<=ord(s)<=90:
........len+=1
注:我不知道怎么在网络知道里打出空格,....就代表空格
‘捌’ python elementtree 判断节点是否有子节点
lxml takes all the pain out of XML.
Stephan Richter
lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库。lxml是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,大部分与熟知的ElementTree API兼容但比之更优越。
安装lxml:
要求:需要Python2.3或更后的版本
使用easy_install工具,以超级用户或管理员的角色run下面的命令:
easy_install lxml
在windows下,最好指定版本号:easy_install lxml==2.2.6
使用lxml进行开发
lxml.etree指南
通常使用lxml.etree的方式
>>> from lxml import etree
Element类,一个Element是ElementTree API的主要容器类,大部分的XML tree功能都是通过这个类来访问的。Elements可以非常容易地通过Element工厂方法来创建。
>>> root = etree.Element("root")
元素的XML tag名字是通过tag属性来访问的
>>> print root.tag # root
Elements是在XML树状结构中组织的,为创建子元素并将它们加到父元素上,可以使用append()方法。
>>> root.append( etree.Element("child1") )
我们还有更高效的方法:SubElement工厂方法,它使用和Element工厂方法相同的参数,不过额外需要父节点作第一个参数:
>>> child2 = etree.SubElement(root, "child2")
>>> child3 = etree.SubElement(root, "child3")
可以使用tostring()方法来看得到的XML
>>> print etree.tostring(root, pretty_print=True)
<root>
<child1/>
<child2/>
<child3/>
</root>
元素是列表
>>> child = root[0]
>>> print child.tag
child1
>>> print len(root)
3
>>> root.index(root[1]) # lxml.etree only!
1
打印所有子节点:
>>> children = list(root)
>>> for child in root:
... print(child.tag)
child1
child2
child3
可以使用insert()方法插入新的子节点:
>>> root.insert(0, etree.Element("child0"))
删除子节点:
>>> root[0] = root[-1] # this moves the element!
>>> for child in root:
... print(child.tag)
child3
child1
child2
如果想把一个元素拷贝到不同的地方,需要创建一个独立的deep 。
>>> from import deep
>>> element = etree.Element("neu")
>>> element.append( deep(root[1]) )
>>> print(element[0].tag)
child1
>>> print([ c.tag for c in root ])
[’child3’, ’child1’, ’child2’]
getparent()返回父节点:
>>> root is root[0].getparent() # lxml.etree only!
True
元素的兄弟或邻居节点是通过next和previous属性来访问的
The siblings (or neighbours) of an element are accessed as next and previous elements:
>>> root[0] is root[1].getprevious() # lxml.etree only!
True
>>> root[1] is root[0].getnext() # lxml.etree only!
True
带属性的元素
XML元素支持属性,可以用Element工厂方法直接创建。
>>> root = etree.Element("root", interesting="totally")
>>> etree.tostring(root)
b’<root interesting="totally"/>’
可以使用set和get方法访问这些属性:
>>> print root.get("interesting")
totally
>>> root.set("interesting", "somewhat")
>>> print root.get("interesting")
somewhat
也可以使用attrib性质的字典接口
>>> attributes = root.attrib
>>> print(attributes["interesting"])
somewhat
>>> print(attributes.get("hello"))
None
>>> attributes["hello"] = "Guten Tag"
>>> print(attributes.get("hello"))
Guten Tag
>>> print(root.get("hello"))
Guten Tag
元素可以包含文字:
>>> root = etree.Element("root")
>>> root.text = "TEXT"
>>> print(root.text)
TEXT
>>> etree.tostring(root)
’<root>TEXT</root>’
如果XML用在(X)HTML中,文本也可以在不同的元素中显示:
<html><body>Hello<br/>World</body></html>
元素有tail属性,它包含XML 树中元素直接跟的,直到下个元素的文本。
>>> html = etree.Element("html")
>>> body = etree.SubElement(html, "body")
>>> body.text = "TEXT"
>>> etree.tostring(html)
b’<html><body>TEXT</body></html>’
>>> br = etree.SubElement(body, "br")
>>> etree.tostring(html)
b’<html><body>TEXT<br/></body></html>’
>>> br.tail = "TAIL"
>>> etree.tostring(html)
b’<html><body>TEXT<br/>TAIL</body></html>’
‘玖’ python解释xml文件遇到不合法字符,如何解决
python ElementTree处理gbk(或者gb2312)编码的XML文件的方法:
1,py文件的编码是utf-8,即在文件最开始有如下语句声明编码方式:
#-*-coding: utf-8-*-
2,读取文件内容时转码为utf-8的:
xml_file_text = open(xml_file_name).read().decode('gbk').encode('utf-8')
这样在处理过程中均是utf-8编码的字符串