pythonelementtree
㈠ python elementtree 生成包含<![CDATA[ ]]>的xml文件
http://stackoverflow.com/questions/174890/how-to-output-cdata-using-elementtree
㈡ 在python中导入from nltk.etree.ElementTree import ElementTree这个模块时为什么老出错
网上随便一搜,就有解决办法了:
1.确保自己的文件,不要叫做xml.py。换个其他任意名字均可。
2.确保自己最开始的位置,加上这句:
import xml.etree.ElementTreeas xml
这样应该就可以了。
㈢ 如何使用Python和xml.etree.ElementTree解析xml文件获取其节点
<?xmlversion="1.0"encoding="utf-8"?>
<root>
<bodyname="lyc">
<age>110</age>
</body>
<bodyname="l"age="10">
</body>
</root>
######################
#coding=UTF8
fromxml.etreeimportElementTree
#xmlText=open("xml.txt").read()
#root=ElementTree.fromstring(xmlText)
root=ElementTree.parse("xml.txt")
bodys=root.getiterator("body")
#getiterator方法获取
print"getiterator"
printbodys
printdir(bodys[0])
print"attrib:",bodys[0].attrib
print"tag:",bodys[0].tag
print"text",bodys[0].text
#getchildren方法获取
print"getchildren"
children=bodys[0].getchildren()
printchildren
print"attrib:",children[0].attrib
print"tag:",children[0].tag
print"text:",children[0].text
#find
print"find"
children=root.find("body")
printchildren
print"attrib:",children.attrib
print"tag:",children.tag
print"text:",children.text
#findall
print"findall"
children=root.findall("body")
printchildren
print"attrib:",children[0].attrib
print"tag:",children[0].tag
print"text:",children[0].text
㈣ python解析xml:xml.etree.ElementTree似乎存在bug
<?xml version = "1.0" encoding = "utf-8"?>
<root>
<body name="lyc">
<age>110</age>
</body>
<body name = "l" age = "10">
</body>
</root>
㈤ python 中 ElementTree按以下方法是用对吗dom = ElementTree(file=urllib.urlopen(SPLDetail_command))
不对啊,
file=urllib.urlopen(SPLDetail_command).read()
dom = ElementTree.parse(file)
㈥ 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的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中的内容
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文本获得。