基于XML的解决方案是为ElementTree编写一个helper类,该类:在解析为ElementTree之前在抓取XML声明行在写入时,如果不同时写入编码属性(我检查了源代码),则无法写入XML声明行。

解析输入文件一次,获取根元素的命名空间。向ElementTree注册该命名空间,将空字符串作为前缀。完成后,使用ElementTree再次使用该新设置分析源文件。

它有一个主要缺点:XML注释丢失。我了解到,对于这种情况,这是不可接受的(我最初认为输入数据没有任何注释,但事实证明它有)。

我的助手类示例:from xml.etree import ElementTree as ET

import re

class ElementTreeHelper():

def __init__(self, xml_file_name):

xml_file = open(xml_file_name, "rb")

self.__parse_xml_declaration(xml_file)

self.element_tree = ET.parse(xml_file)

xml_file.seek(0)

root_tag_namespace = self.__root_tag_namespace(self.element_tree)

self.namespace = None

if root_tag_namespace is not None:

self.namespace = '{' + root_tag_namespace + '}'

# Register the root tag namespace as having an empty prefix, as

# this has to be done before parsing xml_file we re-parse.

ET.register_namespace('', root_tag_namespace)

self.element_tree = ET.parse(xml_file)

def find(self, xpath_query):

return self.element_tree.find(xpath_query)

def write(self, xml_file_name):

xml_file = open(xml_file_name, "wb")

if self.xml_declaration_line is not None:

xml_file.write(self.xml_declaration_line + '\n')

return self.element_tree.write(xml_file)

def __parse_xml_declaration(self, xml_file):

first_line = xml_file.readline().strip()

if first_line.startswith('<?xml ') and first_line.endswith('?>'):

self.xml_declaration_line = first_line

else:

self.xml_declaration_line = None

xml_file.seek(0)

def __root_tag_namespace(self, element_tree):

namespace_search = re.search('^{(\S+)}', element_tree.getroot().tag)

if namespace_search is not None:

return namespace_search.group(1)

else:

return None

def __main():

el_tree_hlp = ElementTreeHelper('houses.xml')

dogs_tag = el_tree_hlp.element_tree.getroot().find(

'{ns}house/{ns}dogs'.format(

ns=el_tree_hlp.namespace))

one_dog_added = int(dogs_tag.text.strip()) + 1

dogs_tag.text = str(one_dog_added)

el_tree_hlp.write('hejsan.xml')

if __name__ == '__main__':

__main()

输出:<?xml version="1.0"?>

2821

3

如果有人对此解决方案有改进,请毫不犹豫地获取代码并加以改进。

python使用xml布局界面_Python:使用ElementTree更新XML文件,同时尽可能地保留布局...相关推荐

  1. python发牌游戏图形界面_python实现扑克牌交互式界面发牌程序

    本文实例为大家分享了python实现扑克牌交互式界面发牌程序的具体代码,供大家参考,具体内容如下 注:图片自行在网上下载.替换即可 #coding=utf-8 class Card(): #扑克牌类 ...

  2. 用 Python 制作可视化 GUI 界面,一键实现自动分类管理文件!

    作者 | 欣一 来源 | Python爱好者集中营 经常杂乱无章的文件夹会让我们找不到所想要的文件,因此小编特意制作了一个可视化GUI界面,通过输入路径一键点击实现文件分门别类的归档. 不同的文件后缀 ...

  3. python制作图形化界面_python图形化界面设计(wxpython)一布局管理

    本篇内容来自https://www.cnblogs.com/-wenli/p/12149850.html 1.布局分析和注意点 例程主要是Sizer布局应用.wx.BoxSizer的布局方向分为横向和 ...

  4. python制作qq登录界面_Python制作一个仿QQ办公版的图形登录界面

    最近,QQ的办公版本--TIM进行了一次更新升级.本次更新升级大幅修改了界面的样式,看起来更加的清爽.简洁和高效了. 这种界面州的先生还是比较喜欢的,没有QQ那么花里胡哨,也比微信那些残缺的功能更加丰 ...

  5. python程序如何做界面_python是如何写界面程序的?

    展开全部 python做界面2113还是用PYQT吧 PYQT支持PY2和PY3 wxpython仅仅支5261持PY2 而python自带的4102tkinter实在是很难1653弄#!/usr/b ...

  6. python编辑用户登录界面_python编辑用户登入界面的实现代码

    1.需求分析 登入界面需要达到以下要求: 系统要有登入和注册两个选项可供选择 系统要能够实现登入出错提示,比如账户密码错误等,用户信息保存在user_info.txt文件夹中 系统要能够进行登入错误次 ...

  7. python实现监控数据界面_python 监控界面

    MySQL MTOP - 开源 MySQL 企业监控系统 MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示 ...

  8. python实现qq登录界面_Python实现QQ界面

    Python实现QQ界面(好友列表,通信部分还未做好,没时间~~嘻嘻) 项目环境: (1)OS:Linux RedHat6.3 (2)Language:Python (3)Lib:pygtk,gtk ...

  9. python如何进入编程界面_Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

最新文章

  1. Angular应用开发中遇到的问题
  2. Tomcat5+Mssql server 2000数据库连接池配置
  3. unity editor下选中GameObject粘贴复制pos信息
  4. Linux修改终端提示符
  5. 项目管理: 软件质量的可靠保证
  6. Linux系统编程(18)——正则表达式实用举例
  7. NotePad++常用快捷键。——Arvin
  8. linux把 root文件夹删除文件,在Linux下删除顽固文件和目录
  9. linux显卡驱动与opengl,NVIDIA率先发布OpenGL 3.0 Linux驱动
  10. Uva 11584 线性DP
  11. Android项目迁移到Androidx经验总结
  12. 这不是结束,而是另一次重逢的开始
  13. 旅游商城会员中心HTML,旅游特产商城功能_旅游特产商城系统-思途旅游CMS
  14. python爬取京东评论怎么翻页_爬取京东网页评论(动态网页)
  15. 图解三次握手与四次挥手
  16. .NET类比学JAVA之访问SqlServer数据库
  17. 爬虫实战——豆瓣电影Top250
  18. Windows安装MySQL以及解决.dll文件缺失问题
  19. 12306登录python_Python模拟登录12306
  20. 会议OA(待开会议所有会议)

热门文章

  1. 为什么Fiori客户主数据的头像在异步模式下取不回来
  2. 什么是SAP Commerce Cloud OCC
  3. SAP UI5里xml fragment getContent方法的实现
  4. linux weblogic 引用antlr.jar,Linux環境下Weblogic部署應用的一些問題
  5. 金士顿固态硬盘计算机如何识别,金士顿SV300 SF2281固态硬盘SSD不认盘开卡修复教程...
  6. python引入自己写的文件_python引入自己写的Py文件
  7. IDEA创建mavenWeb项目笔记
  8. html如何左侧固定div,详解左右宽度固定中间自适应html布局解决方案
  9. ubuntu 开启ssh_CS学习笔记 | 22、通过SSH开通通道
  10. 软件测试有没有测试大纲文档,系统测试大纲(范例).docx