pythonxml节点
1. 我用python写了段删除xml节点的程序,结果输出到另一个xml文件中,怎么保证输出后的各节点的格式不变啊
例如你读取的xml文件存放到a中,然后你对a中某段xml进行删除,删除你把a保存到另一个xml中就可以了
2. python怎么处理xml节点包含命名空间,也就是冒号的情况
a:b为名不行吧,要展开为{URI}b这种形式,看看下面小例子取出的tag名称:
# -*- coding: utf-8 -*-
from xml.etree import ElementTree as ET
import cStringIO
xml = """\
<?xml version="1.0"?>
<root xmlns = "http://default-namespace.org/"
xmlns:py = "http://www.python.org/ns/">
<py:elem1 />
<elem2 xmlns="" />
</root>
"""
f = cStringIO.StringIO(xml)
#find all elements and print tag's name.
tree = ET.parse(f)
print repr(tree.getroot().tag)
elems = tree.findall('.//*')
for elem in elems:
print repr(elem.tag)
#same as above, but using iterparse.
f.seek(0)
for event, elem in ET.iterparse(f, ("start",)):
print repr(elem.tag)
输出:
'{http://default-namespace.org/}root'
'{http://www.python.org/ns/}elem1'
'elem2'
'{http://default-namespace.org/}root'
'{http://www.python.org/ns/}elem1'
'elem2'
3. 怎么用python获取xml文件的所有节点。
假如我们有个xml文档如下:example.xml
<?xml version="1.0" encoding="UTF-8"?>
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
首先,要解析xml文档,需要导入一个模块
>>> from xml.dom.minidom import parse
(1)然后载入一个xml文档
>>> xmldoc = parse("J:/homeword/example.xml")
>>> print xmldoc.toxml()
<?xml version="1.0" ?>
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
>>>
上面是可以查看这个文档的内容。
Toxml方法打印出了node风格的xml,如果节点是Document结果,则打印出整个xml文档。否则只打印出本节点所属内容。
(2)如何获取子节点
>>> xmldoc.childNodes
[<DOM Element: BIT at 0x1223af8>]
>>>
每一个node都有一个childNodes的属性,他是一个node对象的列表,注意的是,一个Document只有一个子节点,上例中就是BIT这个节点,它属于Document节点。
因为是列表,所以也可以同用列表索引,xmldoc.childNodes[0]
>>> BIT_element = xmldoc.firstChild
>>> BIT_element
<DOM Element: BIT at 0x1223af8>
>>> print BIT_element.toxml()
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
>>>
(3)获得某一个节点的文本
>>> BIT_element.childNodes
[<DOM Text node "
">, <DOM Element: GeneralDescription at 0x1223be8>, <DOM Text node "
">, <DOM Element: AMatrix at 0x1223e40>, <DOM Text node "
">]
>>>name = (BIT_element.childNodes[1]).childNodes[1]
>>> >>> name.childNodes[0].data
u'Matlab'
>>>
4. python 读取xml时文本节点显示元素节点
这里的4是作为maxid的子字节点存在的,所以你需要再遍历一层
dom=xml.dom.minidom.parse('c:/12345.xml')
root=dom.documentElement
forrtinroot.childNodes:
ifrt.nodeName=='maxid':
fornodeinrt.childNodes:
printnode.nodeValue
printnode.data
如果你确定这里只有一个maxid,你也可以
importxml.dom.minidom
dom=xml.dom.minidom.parse('c:/12345.xml')
maxid_nodes=dom.getElementsByTagName('maxid')
printmaxid_nodes[0].firstChild.data
希望采纳。
5. Python的XML节点替换或字符串替换问题
fpr=open("text.txt")
data=fpr.read()
n=0
for i in range(len(data)):
if data[i]=='/' and data[i+1]=='>':
n+=1
newdata=data[0:i]+str(n)+'>a'+str(n)+'fora</a'+str(n)+'>'
k=i
break
for i in range(k+1,len(data)):
if data[i]=='/' and data[i+1]=='>':
n+=1
newdata=newdata+data[i-2:i]+str(n)+'>a'+str(n)+'fora</a'+str(n)+'>'
newdata+='<root>'
fpr.close()
fpw=open("newtext.txt","w+")
fpw.write(newdata)
fpw.close()
测试数据:<root>text<a/><a/><a/><root>
输出结果:<root>text<a1>a1fora</a1><a2>a2fora</a2><a3>a3fora</a3><root>
6. python怎么读取xml
引入XML组件:import xml.dom.minidom。
创建一个xml文件,<?xml version="1.0" encoding="utf-8"?>。
相关推荐:《Python教程》
加载读取XML文件,xml.dom.minidom.parse('abc.xml'),这是xml文件的对象。
获取XML文档对象,root = dom.documentElement。
获取标签之间的数据 ,rootdata.getElementsByTagName('caption')。
总结一下xml对象,node.getAttribute(AttributeName),获取XML节点属性值,node.getElementsByTagName(TagName),获取XML节点对象集合,等等具体的查看手册。
7. python写xml中文本节点怎么才能不换行
1、在python 2.x中,在print 'xxxx' 后面加一个逗号
print 'hello world',
2、python 3.x中,需要在函数内增加一个end字段:
print('hello world', end='')
8. 比较两个xml节点的异同 python
1. 你-两个或lxml的树。
2. 如果你把一个DOM方法,你可以根据需要去穿越两棵树的节点(节点类型,文本,属性)。 递归的解决方案将是最优雅的-只是短路一次一对节点不是“等于”或一旦检测到叶一棵树,当它在另一个分支,等等。
parser = etree.XMLParser(remove_blank_text=True)
xml1 = etree.fromstring(xml_string1, parser)
xml2 = etree.fromstring(xml_string2, parser)
print "xml1 == xml2: " + str(xml1 == xml2)
ppxml1 = etree.tostring(xml1, pretty_print=True)
ppxml2 = etree.tostring(xml2, pretty_print=True)
print "pretty(xml1) == pretty(xml2): " + str(ppxml1 == ppxml2)
xml_string_io1 = StringIO()
xml1.getroottree().write_c14n(xml_string_io1)
cxml1 = xml_string_io1.getvalue()
xml_string_io2 = StringIO()
xml2.getroottree().write_c14n(xml_string_io2)
cxml2 = xml_string_io2.getvalue()
print "canonicalize(xml1) == canonicalize(xml2): " + str(cxml1 == cxml2)
9. 如何使用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
10. 请问用python怎么修改xml的节点值
from xml.etree import ElementTree
filePath = 'd:\\aaa.xml'
xmldoc = ElementTree.parse(filePath)
node = xmldoc.find('./string')
node.text = "win 7"
其实说实话,楼上的回答已经很清楚了.
不管什么编程语言,要想学好,基础一定要扎实.