一.XML模块

xml指的是可扩展标记语言,是一种定义电子文档结构和描述的语言,可以用来标记数据、定义数据类型。

什么时候用xml?

当需要自定义文档结构时,使用xml。在java中经常会使用xml来作为配置文件。而作为配置文件经常的操作是通过程序去读取配置文件信息。标签的叫法:node(节点),elment(元素),tag(标签)

xml文档格式:

一个完整的标签分为三个部分:

  1. <person name="jack">hello i am a person</person>

1.标签名(tagname):person

2.属性(attribute):name值为jack

3.文本(text):hello i am a person

属性和文本都是可选的,可以定义一个空标签:

  1. <person></person>

其他格式要求:

1.任何的起始标签都必须有一个结束标签。

2.可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如。XML解析器会将其翻译成。

3.标签必须按顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

4.所有的属性都必须有值。

5.所有的特性都必须在值的周围加上双引号。

6.最外层必须有且只能有一个标签,称为根标签

xml与json的对比:

json主要用于前后台数据交互,json使用起来比xml简单,而xml支持的数据类型理论上是不受限制的,因为可以完全自定义标签的结构和含义,使用场景也非常广泛,不局限于前后台的数据交互,在一些语言中还经常作为配置文件来使用,而且xml出现的时间比较早,早期项目都是用的xml。

  1. 1.三个用于查找标签函数
  2.  
  3. iter("标签名") #全文查找
  4. find("标签名") #查找子节点匹配的第一个
  5. findall("标签名") #查找字节点匹配的所有
  6. 2.访问标签的内容
  7.  
  8. element.tag 获取标签名
  9. element.attrib 获取属性
  10. element.text 获取文本
  11. 3.修改文档内容
  12.  
  13. elment.tag = "标签名"
  14. element.text = "文本"
  15. element.set("属性名","属性值")
  16. 4.删除节点
  17.  
  18. root.remove(标签对象)
  19. 5.添加子标签
  20.  
  21. #创建标签对象
  22. year2=ET.Element('year2') # 指定名称
  23. year2.text='新年'
  24. year2.attrib={'update':'yes'}
  25. #添加
  26. country.append(year2) #往country节点下添加子节点
  27. 删除添加修改后都需要调用write写入到文件
  28.  
  29. tree.write("文件名"),#注意文档对象才能执行写入操作
  1. #countrys.xml
  2.  
  3. <data>
  4. <country name="Liechtenstein">
  5. <rank updated="yes">2</rank>
  6. <year>2009</year>
  7. <gdppc>141100</gdppc>
  8. <neighbor direction="E" name="Austria" />
  9. <neighbor direction="W" name="Switzerland" />
  10. </country>
  11. <country name="Singapore">
  12. <rank updated="yes">5</rank>
  13. <year>2012</year>
  14. <gdppc>59900</gdppc>
  15. <neighbor direction="N" name="Malaysia" />
  16. </country>
  17. <country name="Panama">
  18. <rank updated="yes">69</rank>
  19. <year>2012</year>
  20. <gdppc>13600</gdppc>
  21. <neighbor direction="W" name="Costa Rica" />
  22. <neighbor direction="E" name="Colombia" />
  23. </country>
  24. </data>
  25.  
  26. # 需求从conuntrys中获取所有的国家名称
  27. # 取别名 可以用于简化书写
  28. import xml.etree.ElementTree as ET
  29. tree = ET.parse("countrys")
  30. # 获取根标签
  31. root = tree.getroot()
  32.  
  33. # 第一种获取标签的方式
  34. # iter() 全文查找
  35. # 获取迭代器 如果不指定参数 则迭代器迭代的是所有标签
  36. # print(root.iter())
  37.  
  38. # 获取迭代器 如果指定参数 则迭代器迭代的是所有名称匹配的标签
  39. # for e in root.iter("rank"):
  40. # print(e)
  41.  
  42. # 第二种获取标签的方式
  43. # 在当前标签下(所有子级标签)寻找第一个名称匹配的标签
  44. # print(root.find("rank"))
  45.  
  46. # 第三种获取标签的方式
  47. # 在当前标签下(所有子级标签)寻找所有名称匹配的标签
  48. # print(root.findall("rank"))
  49.  
  50. # 练习 找到新加坡中year这个标签
  51. # 1.拿到所有国家标签
  52. # for e in root.iter("country"):
  53. # # 标签的三个内容
  54. # #print(e.tag) # 标签名称
  55. # #print(e.attrib)# 属性 字典类型
  56. # #print(e.text) # 文本内容
  57. # if e.attrib["name"] == "Singapore":
  58. # y = e.find("year")
  59. # print(y.text)
  60.  
  61. # 在程序中修改文档内容
  62. # 把所有year标签的文本加1
  63.  
  64. # for e in root.iter("year"):
  65. # e.text = str(int(e.text) + 1)
  66. #
  67. # # 做完修改后要将修改后的内容写入文件
  68. # tree.write("countrys")
  69.  
  70. # 把新加坡国家删除
  71. # for e in root.findall("country"):
  72. # print(e)
  73. # if e.attrib["name"] == "Singapore":
  74. # # 删除时 要通过被删除的父级标签来删除
  75. # root.remove(e)
  76. #
  77. #
  78. # tree.write("countrys2")
  79.  
  80. # 用程序将中国的信息写入文档中
  81. # 添加时 也需要将要添加的数据做成一个Element
  82. c = ET.Element("country",{"name":"china"})
  83.  
  84. # 在国家下有一堆子标签
  85. ranke = ET.Element("ranke",{"updated":"yes"})
  86. c.append(ranke)
  87.  
  88. year = ET.Element("year")
  89. year.text = ""
  90. c.append(year)
  91.  
  92. #添加到root标签中
  93. root.append(c)
  94. tree.write("countrys2")
  95.  
  96. # 一般不会通过程序 去修改 删除 和添加
  97. # 总结:
  98. # 什么时候应该使用XML格式
  99. # 当你需要自定文档结构时 (XML最强大的地方就是结构)
  100. # 前后台交互不应该使用
  1. import xml.etree.ElementTree as ET
  2.  
  3. # 创建根标签
  4. root = ET.Element("root")
  5. root.text = "这是一个XML文档!"
  6.  
  7. c = ET.Element("country",{"name":"china"})
  8. root.append(c)
  9.  
  10. tree = ET.ElementTree(root)
  11. # 参数: 文件名称 编码方式 是否需要文档声明
  12. tree.write("new.xml",encoding="utf-8",xml_declaration=True)

代码生成xml文档

二.项目开发过程

项目的生命周期:

1.需求分析

2.项目设计

3.项目开发

4.项目测试

5.上线运行

6.维护更新

项目的设计:

最经典的结构是三层结构,一个应用程序的本质,就是在帮用户处理数据,分为三步:

1.用户通过某种方式将数据交给程序 (手机APP 浏览器,PC段程序)
2.程序在拿到数据之后进行分析 判断数据是否是正确的 (python c,java)
3.将正确数据进行存储 (数据库 文件)

在三层结构中,将整个程序分为三个部分:

1.用户界面层 负责接收用户数据 ,或者展示数据给用户
2.业务逻辑层 负责处理用户界面层得到的数据,进行判断 验证
3.数据访问层(持久层) 负责帮助业务逻辑层 保存数据 或是读取数据
与程序处理数据的三步刚好是对应

注: 界面层与数据层不应该直接通讯当然不分层也可以,但是随着项目功能越来越多,你的代码结构越来越乱,从而带来结果时 ,维护困难,无法扩展,所以要分层,分成最终目的尽可能的实现 高内聚 低耦合(相关都聚集在一起,不想关的功能拆的干干净净(各模块间的影响降低))

在项目开发中会有三个文档:
1.需求分析书
2.接口文档(前后台制定相同的标准 api) 接口指的是后台提供前台用于完成某个功能的函数
3.原型图 这是美工画出来的图 前段程序员负责按照原型图 用代码实现

  1.  

xml模块、项目开发过程的更多相关文章

  1. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  2. maven 多模块项目

    转自:http://www.blogjava.net/fancydeepin/archive/2015/06/27/maven-modules.html 项目结构 proj   |   |— proj ...

  3. IntelliJ Idea14 创建Maven多模块项目

    Maven多模块项目的参考资料 Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html 在这个教程里, ...

  4. SSH框架之一详解maven搭建多模块项目

    闲来无事,思量着自己搭建一个ssh框架,一来回顾熟悉一下ssh的内容,hibernate还就没用过了,生疏了都.二来整合一下,将其他掌握的和正在学习的框架核技术糅合到一起,就当是做一个demo练手了. ...

  5. 使用Maven构建多模块项目

    [转] 使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务 ...

  6. 【Maven】使用Maven构建多模块项目

    Maven多模块项目 Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定 ...

  7. 转: maven进阶:一个多模块项目

    一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...

  8. Maven管理多模块项目

    首先,我们要明确的多模块项目的含义,它是指一个应用中包含多个module.一般来说,一个应用单独部署成服务,只是打包的时候,maven会把各个module组合在一起.各模块一般单独打成jar放到lib ...

  9. PhpStorm创建Drupal模块项目开发教程(4)

    编码器是一个检查和操纵代码的Drupal-specific工具. 探测器则是发现异常代码,通常被用于开发中的编码错误预警. 接下来将介绍编码器与探测器在PhpStorm中整合工作的各个步骤,实现PHP ...

随机推荐

  1. LeetCode(123):买卖股票的最佳时机 III

    Hard! 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必 ...

  2. 小学生都看得懂的C语言入门(5): 指针

    现在已经学到C语言的后面了, 快学完咯.... (一)取地址运算 先来看一下sizeof 计算所占字节 #include<stdio.h> int main() { int a; a=; ...

  3. CF939F

    好神奇的dp... 首先有一个很简单的思想:设dp[i][j]表示目前到了第i分钟,朝上的面被烤了j分钟的情况下所需的最小交换次数 那么有转移:dp[i][j]=min(dp[i-1][j],dp[i ...

  4. jacoco + eclipse单元测试覆盖率

    概念 Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant.Maven中:可以作为Eclipse插件,可以使用其JavaAgent技术监控J ...

  5. jmeter IP欺骗功能

    使用过loadrunner的同学,应该都了解有个IP欺骗功能,jmeter遇到类似需求怎样实现呢? 环境:windows7,jdk1.8,jmeter3.1 使用IP欺骗功能前提是本地有多个可用IP, ...

  6. 论文阅读笔记二十一:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS(ICRL2016)

    论文源址:https://arxiv.org/abs/1511.07122 tensorflow Github:https://github.com/ndrplz/dilation-tensorflo ...

  7. DapperHelper 帮助类

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  8. WPF:如何高速更新Model中的属性

    原文:[WPF/MVVM] How to deal with fast changing properties In this article, I will describe a problem w ...

  9. [转] meta标签的作用及整理

    meta的标签的使用是我在前端学习中曾经困惑过一段时间的问题.一方面不是很了解meta标签的用途,另一方面是对于meta标签里的属性和值不是懂,也不知道从哪里冒出来的,所以这篇文章专门整理下meta标 ...

  10. machinekey生成工具 v1.0 官方最新版

    http://www.33lc.com/soft/66056.html 电信下载 广东电信下载 厦门电信下载 湖北电信下载 江苏电信下载 网通下载 陕西网通下载 山东网通下载 甘肃网通下载 山西网通下 ...