python 读取并解析xml文档,生成xml文档

# python 读取数据一般使用xml模块中的ElementTree()
# 生成文档一般使用DOM模块下的Document()方法
import xml.etree.ElementTree as ET
'''
读取xml文件:
引入ET函数
获取元素树对象
获取根节点
获取tag 和attrib
循环访问 所有元素节点   根据索引访问元素节点
'''

# 导入相关的类库
tree = ET.ElementTree(file=r'./demo.xml')  # 获取元素树对象
root = tree.getroot()  # 获取元素树的根节点
# print(tree, root)
print(root.tag, root.attrib)  # 通过tag 和attribute 访问元素的标签和属性
# 循环访问节点子元素
for tag in root:
    print(tag.tag, tag.attrib)
    print(tag[0].text)  # 根据索引读取元素
    for c_tag in tag:
        print(c_tag.tag, c_tag.text)


"""
元素对象.find(tag) 返回该标签对应的元素对象
findAll() 返回所有对象
"""

```python
from xml.dom.minidom import Document  # 导包

# 创建文本对象
doc = Document()
# 为doc对象创建节点元素
root = doc.createElement("root")  # 传入tag
# 添加节点
doc.appendChild(root)
head = doc.createElement("head")
root.appendChild(head)
# print(doc.toxml())
# 创建文本内容
text1 = doc.createTextNode('1')
node = doc.createElement("node")
node.appendChild(text1)
head.appendChild(node)
text2 = doc.createTextNode("访问成功")
msg = doc.createElement("msg")
msg.appendChild(text2)
head.appendChild(msg)
print(doc.toprettyxml(encoding='UTF-8').decode('UTF-8'))
# 保存文件
with open("demow.xml", "w+") as f:
    f.write(doc.toprettyxml(encoding='UTF-8').decode('UTF-8'))
    f.close()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Web应用中,有时需要按照固定的模板将数据导出到Word,如流程审批单,在流程处理完成后将处理过程按照流程单的要求导出,有时程序中需要实现生成标准Word文档,要求能够打印,并且保持页面样式不变,常见的方案有POI、iText、JACOB、JSP几种方式,POI读取Word文档比较适合、对于生成文档样式比较难控制,iText操作Excel还可以,对Word的操作功能有限,JACOB操作Word实现复杂,并且无法将服务部署到Linux平台,要求安装office,对于实现固定格式的报表实现困难,对于JSP直接输出方式样式控制难。 Word从2003开始支持XML格式,用XML+Freemarder还做就很简单了,大致的思路是先用office2003或者2007编辑好 word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成文档和office中编辑文档完全一样。具体实现过程如下: 1、 首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,将需要动态填充的内容使用Freemarker标签替换:Word文档样式如下: 2、 将Word文档另存为XML格式,将后缀名“xml”修改为“ftl” 3、 使用Freemarker填充内容,代码如下: [java] view plaincopyprint? 1. package com.test.freemarker.report; 2. 3. 4. 5. import java.io.BufferedWriter; 6. 7. import java.io.File; 8. 9. import java.io.FileOutputStream; 10. 11. import java.io.IOException; 12. 13. import java.io.OutputStreamWriter; 14. 15. import java.io.Writer; 16. 17. import java.util.HashMap; 18. 19. import java.util.Map; 20. 21. 22. 23. import freemarker.template.Configuration; 24. 25. import freemarker.template.Template; 26. 27. import freemarker.template.TemplateException; 28. 29. 30. 31. public class DocumentHandler { 32. 33. private Configuration configuration = null; 34. 35. 36. 37. public DocumentHandler() { 38. 39. configuration = new Configuration(); 40. 41. configuration.setDefaultEncoding("utf-8"); 42. 43. } 44. 45. 46. 47. public void createDoc() { 48. 49. // 要填入模本的数据文件 50. 51. Map dataMap = new HashMap(); 52. 53. getData(dataMap); 54. 55. // 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载, 56. 57. // 这里我们的模板是放在com.havenliu.document.template包下面 58. 59.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值