1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件 .ini .propertity .xml .cfg
2、XML文件的基本格式:
标签:分为双标签和单标签,双标签的开头和结尾标签名必须一致,大小写一样,/ 开头的是结尾标签,单标签必须在 > 前加上 / 来结尾,单标签中不能放文本。
属性:在开始标签中定义一些名值对,值一定是字符串
3、XML文件的基本构成:
1)在第一行是XML声明 <?xml version=1.0 encoding=UTF-8 ?>
2)必须且只能有一对根标签
3)标签可以一层一层嵌
二、写一个简单的xml文档stus.xml然后用Dom进行解析。
DOM : Document Object Model 文档对象模型
DOM解析的基本思路:将整个XML文件一次性读入内存,将整个XML看做一棵文档树,XML中的每一个标签,属性,文本都看做是树上的一个结点,然后可以对结点进行增删改查的操作。
已经编辑好的stus.xml文档
<?xml version=1.0 encoding=UTF-8?> <stus Class=1401 > <stu num=01> <name>张三</name> <age>19</age> <sex>男</sex> </stu> <stu num=02> <name>李四</name> <age>20</age> <sex>女</sex> </stu> <stu num=03> <name>王五</name> <age>21</age> <sex>男</sex> </stu> </stus>
三、开始解析
创建解析工厂
// 得到解析工厂对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 生产一个解析器对象 DocumentBuilder builder = factory.newDocumentBuilder(); // 开始解析xml文件,得到的解析结果是一个Document对象,Document对象叫做文档树对象 Document dom = builder.parse(stus.xml);
1、增加节点
基本思路:首先创建一个新的元素节点,将元素节点追加到根节点后面,设置其节点属性。创建标签,设置标签文本内容,最后将新标签添加到新的元素节点中。
代码:
// 创建一个新的元素节点 Element stu = dom.createElement(stu); // 将元素节点追加到根节点后面 root.appendChild(stu); // 设置节点属性 stu.setAttribute(num, 04); // 创建标签 Element name = dom.createElement(name); Element age = dom.createElement(age); Element sex = dom.createElement(sex); // 设置标签文本内容 name.setTextContent(赵六); age.setTextContent(19); sex.setTextContent(女); // 把标签添加到新的元素节点stu中 stu.appendChild(name); stu.appendChild(age); stu.appendChild(sex);
2、删除节点
基本思路:获得要删除的节点,然后得到节点的属性值,与要删除的节点的属性值进行比较,如果该属性值对应的节点存在则移除该节点。
代码:
// 获得根节点 Element root = (Element) dom.getFirstChild(); // 获得所有stu节点 NodeList list = dom.getElementsByTagName(stu); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (node instanceof Element) { Element e = (Element) node; // 得到节点的属性值,与要删除的结点的属性值进行比较,然后移除该属性值对应的结点 String num = e.getAttribute(num); if (num.equals(02)) { root.removeChild(e); break; } } }
3、修改节点
基本思路:获得要修改的节点,修改其属性值,然后获得该节点下的标签,修改标签中的文本内容。
代码:
// 修改节点属性 for (int j = 0; j < list.getLength(); j++) { Node no = list.item(j); if (no instanceof Element) { Element el = (Element) no; String n = el.getAttribute(num); if (n.contains(01)) { el.setAttribute(num, 05); // 修改标签值 NodeList li = el.getChildNodes(); for (int x = 0; x < li.getLength(); x++) { Node d = li.item(x); if (d instanceof Element) { Element ee = (Element) d; String noN = ee.getNodeName(); if (noN.equals(name)) { ee.setTextContent(小白); } else if (noN.equals(age)) { ee.setTextContent(11); } else if (noN.equals(sex)) { ee.setTextContent(男); } } } }
4、查找节点
基本思路:获得所有的节点,用 需要查找的结点的属性值与所有节点进行比较,如果该节点存在,就打印该节点的属性值及其节点下标签的内容。
代码:
for (int j = 0; j < list.getLength(); j++) { Node no = list.item(j); if (no instanceof Element) { Element el = (Element) no; String n = el.getAttribute(num); //查找节点,显示其属性值及标签内容 if(n.equals(03)){ System.out.println(no.getNodeName()+\t+n+no.getTextContent()); } } }
4、保存修改后的xml文档
基本思路:先将内存中的Document对象写到xml文件中,然后将整个Document对象作为要写入xml文件的数据源,最后将数据源写入目标文件。
代码:
// 将内存中的Document对象写到xml文件中 TransformerFactory tf = TransformerFactory.newInstance(); Transformer former = tf.newTransformer(); former.setParameter(version, 1.0); former.setParameter(encoding, GBK); // 将整个Document对象作为要写入xml文件的数据源 DOMSource xmlSource = new DOMSource(dom); // 要写入的目标文件 StreamResult outputTarget = new StreamResult(new File(F:\\stus2.xml)); former.transform(xmlSource, outputTarget);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。