導航:首頁 > 編程語言 > pythonxml增加節點

pythonxml增加節點

發布時間:2022-10-18 19:44:19

⑴ 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>
"""

⑵ python怎麼向已經存在的xml文件中追加填入數據呢

呵呵,首先,你讀出來的東西是沒法修改的.只能讀出來後放到一個變數里,然後向這個變數里插入東西.然後再將這個變數寫到一個新的XML文件里.

⑶ 如何編寫一個程序從xml文件裡面提取一些關鍵的節點數據組成新的xml文件,最好是用python編寫

給你一段代碼,供參考:

fromsgmllibimportSGMLParser
importhtmlentitydefs

classBaseHTMLProcessor(SGMLParser):
defreset(self):
#extend(calledbySGMLParser.__init__)
self.pieces=[]
SGMLParser.reset(self)

defunknown_starttag(self,tag,attrs):
#calledforeachstarttag
#attrsisalistof(attr,value)tuples
#e.g.for<preclass="screen">,tag="pre",attrs=[("class","screen")]
#,but
#'tquotedinthesource
#document,
#(singletodoublequotes).
#Notethatimproperlyembeddednon-HTMLcode(likeclient-sideJavascript)
#,causingruntimescripterrors.
#Allnon-(<!--code-->)
#(inhandle_comment).
strattrs="".join(['%s="%s"'%(key,value)forkey,valueinattrs])
self.pieces.append("<%(tag)s%(strattrs)s>"%locals())

defunknown_endtag(self,tag):
#calledforeachendtag,e.g.for</pre>,tagwillbe"pre"
#Reconstructtheoriginalendtag.
self.pieces.append("</%(tag)s>"%locals())

defhandle_charref(self,ref):
#,e.g.for"&#160;",refwillbe"160"
#.
self.pieces.append("&#%(ref)s;"%locals())

defhandle_entityref(self,ref):
#calledforeachentityreference,e.g.for"&;",refwillbe""
#.
self.pieces.append("&%(ref)s"%locals())
#;otherentitiesarenot
ifhtmlentitydefs.entitydefs.has_key(ref):
self.pieces.append(";")

defhandle_data(self,text):
#calledforeachblockofplaintext,i.e.outsideofanytagand
#
#Storetheoriginaltextverbatim.
self.pieces.append(text)

defhandle_comment(self,text):
#calledforeachHTMLcomment,e.g.<!--insertJavascriptcodehere-->
#Reconstructtheoriginalcomment.
#-side
#code(likeJavascript)
#processorundisturbed;seecommentsinunknown_starttagfordetails.
self.pieces.append("<!--%(text)s-->"%locals())

defhandle_pi(self,text):
#,e.g.<?instruction>
#.
self.pieces.append("<?%(text)s>"%locals())

defhandle_decl(self,text):
#calledfortheDOCTYPE,ifpresent,e.g.
#<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
# "http://www.w3.org/TR/html4/loose.dtd">
#ReconstructoriginalDOCTYPE
self.pieces.append("<!%(text)s>"%locals())

defoutput(self):
""""""
return"".join(self.pieces)

if__name__=="__main__":
fork,vinglobals().items():
printk,"=",v

⑷ python怎麼向已經存在的xml文件中追加填入數據

直接操作文件肯定不現實,只能先使用python自帶模塊xml.etree 解析xml,然後找到對應的節點把數據添加進去,重新寫入文件。

⑸ python寫xml中文本節點怎麼才能不換行

1、在python 2.x中,在print 'xxxx' 後面加一個逗號
print 'hello world',

2、python 3.x中,需要在函數內增加一個end欄位:
print('hello world', end='')

⑹ 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結點,該節點原來是空值

XML code

<?xml version="1.0" encoding="utf-8"?>
<config>
<id></id>
<log_path>E:/Python</log_path>
</config>


fromxml.etreeimportElementTree
xml_file='config.xml'
xml=ElementTree.ElementTree(file=xml_file).getroot()
xml.find('id').text=1
xml.write("output.xml")

⑻ 請問用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

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文件中。

閱讀全文

與pythonxml增加節點相關的資料

熱點內容
macpdfword轉換器 瀏覽:904
壓縮面膜是什麼材質 瀏覽:353
抖音發布作品怎麼建文件夾 瀏覽:13
安卓如何更改谷歌地區 瀏覽:273
airpods為什麼安卓連上聲音很大 瀏覽:510
聯想伺服器按鈕怎麼開不了機 瀏覽:93
蘋果xrapp程序庫沒有了怎麼辦 瀏覽:843
在上海程序員一個月多少工資 瀏覽:326
k歌解壓圖片 瀏覽:579
cad中清理多餘圖層的命令 瀏覽:989
華為nova8xe是安卓什麼 瀏覽:58
湯姆貓伺服器為什麼免費 瀏覽:274
safenet加密狗怎麼用 瀏覽:41
phpsql查詢變數 瀏覽:104
地磅儀表盤加密方法 瀏覽:480
brew安裝php環境 瀏覽:829
電腦版釘釘如何加密 瀏覽:709
android動畫結合 瀏覽:925
androidfb0 瀏覽:579
我的世界怎麼給伺服器稱號 瀏覽:462