pythonxml添加節點
⑴ 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
希望採納。
⑵ 請問用python怎麼修改xml的節點值
from xml.etree import ElementTree
filePath = 'd:\\aaa.xml'
xmldoc = ElementTree.parse(filePath)
node = xmldoc.find('./string')
node.text = "win 7"
其實說實話,樓上的回答已經很清楚了.
不管什麼編程語言,要想學好,基礎一定要扎實.
⑶ python操作xml文件問題
我給你個示例代碼,你自己改改增加子節點那一段就好了。
#!/usr/bin/python
# -*- coding=utf-8 -*-
# author : [email protected]
# date: 2012-05-25
# version: 0.1
from xml.etree.ElementTree import ElementTree,Element
def read_xml(in_path):
'''讀取並解析xml文件
in_path: xml路徑
return: ElementTree'''
tree = ElementTree()
tree.parse(in_path)
return tree
def write_xml(tree, out_path):
'''將xml文件寫出
tree: xml樹
out_path: 寫出路徑'''
tree.write(out_path, encoding="utf-8",xml_declaration=True)
def if_match(node, kv_map):
'''判斷某個節點是否包含所有傳入參數屬性
node: 節點
kv_map: 屬性及屬性值組成的map'''
for key in kv_map:
if node.get(key) != kv_map.get(key):
return False
return True
#---------------search -----
def find_nodes(tree, path):
'''查找某個路徑匹配的所有節點
tree: xml樹
path: 節點路徑'''
return tree.findall(path)
def get_node_by_keyvalue(nodelist, kv_map):
'''根據屬性及屬性值定位符合的節點,返回節點
nodelist: 節點列表
kv_map: 匹配屬性及屬性值map'''
result_nodes = []
for node in nodelist:
if if_match(node, kv_map):
result_nodes.append(node)
return result_nodes
#---------------change -----
def change_node_properties(nodelist, kv_map, is_delete=False):
'''修改/增加 /刪除 節點的屬性及屬性值
nodelist: 節點列表
kv_map:屬性及屬性值map'''
for node in nodelist:
for key in kv_map:
if is_delete:
if key in node.attrib:
del node.attrib[key]
else:
node.set(key, kv_map.get(key))
def change_node_text(nodelist, text, is_add=False, is_delete=False):
'''改變/增加/刪除一個節點的文本
nodelist:節點列表
text : 更新後的文本'''
for node in nodelist:
if is_add:
node.text += text
elif is_delete:
node.text = ""
else:
node.text = text
def create_node(tag, property_map, content):
'''新造一個節點
tag:節點標簽
property_map:屬性及屬性值map
content: 節點閉合標簽里的文本內容
return 新節點'''
element = Element(tag, property_map)
element.text = content
return element
def add_child_node(nodelist, element):
'''給一個節點添加子節點
nodelist: 節點列表
element: 子節點'''
for node in nodelist:
node.append(element)
def del_node_by_tagkeyvalue(nodelist, tag, kv_map):
'''同過屬性及屬性值定位一個節點,並刪除之
nodelist: 父節點列表
tag:子節點標簽
kv_map: 屬性及屬性值列表'''
for parent_node in nodelist:
children = parent_node.getchildren()
for child in children:
if child.tag == tag and if_match(child, kv_map):
parent_node.remove(child)
if __name__ == "__main__":
#1. 讀取xml文件
tree = read_xml("./test.xml")
#2. 屬性修改
#A. 找到父節點
nodes = find_nodes(tree, "processers/processer")
#B. 通過屬性准確定位子節點
result_nodes = get_node_by_keyvalue(nodes, {"name":"BProcesser"})
#C. 修改節點屬性
change_node_properties(result_nodes, {"age": "1"})
#D. 刪除節點屬性
change_node_properties(result_nodes, {"value":""}, True)
#3. 節點修改
#A.新建節點
a = create_node("person", {"age":"15","money":"200000"}, "this is the firest content")
#B.插入到父節點之下
add_child_node(result_nodes, a)
#4. 刪除節點
#定位父節點
del_parent_nodes = find_nodes(tree, "processers/services/service")
#准確定位子節點並刪除之
target_del_node = del_node_by_tagkeyvalue(del_parent_nodes, "chain", {"sequency" : "chain1"})
#5. 修改節點文本
#定位節點
text_nodes = get_node_by_keyvalue(find_nodes(tree, "processers/services/service/chain"), {"sequency":"chain3"})
change_node_text(text_nodes, "new text")
#6. 輸出到結果文件
write_xml(tree, "./out.xml")
⑷ 如何用Python創建生成xml文檔文件的方法
1、內存數據產生
2、產生xml內存對象(也就是DOM樹)
3、產生根對象
4、往根對象里加數據
5、把xml內存對象寫到文件
下面是一個創建xml文檔的簡單實例:
importxml.dom.minidom#在內存中創建一個空的文檔doc=xml.dom.minidom.Document()
#創建一個根節點Managers對象root=doc.createElement('Managers')
#設置根節點的屬性root.setAttribute('company','xx科技')
root.setAttribute('address','科技軟體園')
#將根節點添加到文檔對象中doc.appendChild(root)
managerList=[{'name':'joy','age':27,'sex':'女'},
{'name':'tom','age':30,'sex':'男'},
{'name':'ruby','age':29,'sex':'女'}
]foriinmanagerList:
nodeManager=doc.createElement('Manager')
nodeName=doc.createElement('name')
#給葉子節點name設置一個文本節點,用於顯示文本內容
nodeName.appendChild(doc.createTextNode(str(i['name'])))
nodeAge=doc.createElement("age")
nodeAge.appendChild(doc.createTextNode(str(i["age"])))
nodeSex=doc.createElement("sex")
nodeSex.appendChild(doc.createTextNode(str(i["sex"])))
#將各葉子節點添加到父節點Manager中,
#最後將Manager添加到根節點Managers中
nodeManager.appendChild(nodeName)
nodeManager.appendChild(nodeAge)
nodeManager.appendChild(nodeSex)
root.appendChild(nodeManager)#開始寫xml文檔fp=open('c:\wcx\Manager.xml','w')
doc.writexml(fp,indent=' ',addindent=' ',newl=' ',encoding="utf-8")
執行結果:
<?xmlversion="1.0"encoding="utf-8"?>
<Managersaddress="科技軟體園"company="xx科技">
<Manager>
<name>joy</name>
<age>27</age>
<sex>女</sex>
</Manager>
<Manager>
<name>tom</name>
<age>30</age>
<sex>男</sex>
</Manager>
<Manager>
<name>ruby</name>
<age>29</age>
<sex>女</sex>
</Manager>
</Managers>
6.用Python自帶的寫xml文檔的API去寫,比較方便,後期容易維護。如果直接用打開文件的方式,一行一行的去寫,比較費時,也難以維護。
⑸ Python怎麼把一個xml文件的部分節點拷貝到另一個xml文件的根節點或子節點去,求大神指教詳細代碼新手一個
用lxml庫把兩個xml都載入上來,用xpath方法可以優美的提取你想要的節點,再組合成新etree對象,最後保存file.思路就是這樣
⑹ python寫xml中文本節點怎麼才能不換行
1、在python 2.x中,在print 'xxxx' 後面加一個逗號
print 'hello world',
2、python 3.x中,需要在函數內增加一個end欄位:
print('hello world', end='')
⑺ python怎麼向已經存在的xml文件中追加填入數據
直接操作文件肯定不現實,只能先使用python自帶模塊xml.etree 解析xml,然後找到對應的節點把數據添加進去,重新寫入文件。
⑻ 如何用python讀取一個xml文件然後替換某個節點的值
其實python有解析xml的模塊
只是你這個xml文件太簡單,字元串處理就夠了
還是一樣,按行搜索,加個flag,讀到b並且attr=2是flag=1
如果flag=1且本行是<b2>就替換數值,flag=0
等循環完了,寫入新文件就行
⑼ 1、使用python讀取依據生成的xml文件,添加樣式表,最中生成一個html文件
#coding=utf8
#引入要用到的xml解析庫這里我們用比較輕量級的minidom就行了
importxml.dom.minidom
#定義一個html輸出模板
#後面我們只是要把這段html中的學生數據部分(<student_trs/>)換成xml中讀到的數據
template="""
<html>
<tableborder="1"style="width:100%;text-align:center;">
<tr>
<tdcolspan="4">學生信息</td>
</tr>
<student_trs/>
</table>
</html>
"""
#讀取xml文檔內容,這里假設是a.xml
dom=xml.dom.minidom.parse('a.xml')
#獲取xml中的所有student節點
student_nodes=dom.getElementsByTagName('student')
#初始化student_trs為空
student_trs=""
#遍歷每一條學生信息
fornodeinstudent_nodes:
#getAttribute用戶獲取節點的屬性,得到id屬性值即學號
#因為xml解析後是Unicode編碼的,所以這里要轉成utf8編碼,下面同理
sid=node.getAttribute("id").encode('utf-8')
#獲取所有子節點
children=node.childNodes
forchildinchildren:
#判斷子節點的名字為姓名、性別、專業的話,就採集其對應文本
ifchild.nodeName.encode('utf-8')=="姓名":
#使用。childNodes[0].nodeValue的方法得到節點的文本
name=child.childNodes[0].nodeValue.encode('utf-8')
ifchild.nodeName.encode('utf-8')=="性別":
sex=child.childNodes[0].nodeValue.encode('utf-8')
ifchild.nodeName.encode('utf-8')=="專業":
specialty=child.childNodes[0].nodeValue.encode('utf-8')
#組成html中的一行學生數據
student_tr="<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>"%(sid,name,sex,specialty)
#將這一行數據添加到總數據中
student_trs+=student_tr
#替換模板的<student_trs/>為我們上面所得到的html數據
html=template.replace("<student_trs/>",student_trs)
#輸入html結果到output.html
open("output.html","w").write(html)
#PS:你提供的xml數據有問題,確實了一個</students>標記
#正確的xml應該如下
"""
<?xmlversion="1.0"encoding="UTF-8"?>
<person>
<students>
<studentid="20140711">
<姓名>三</姓名>
<性別>男</性別>
<專業>計算機</專業>
</student>
</students>
</person>
"""