xml解析——增删改查操作后将其修改结果保存

来源:互联网 发布:股票大作手回忆录 知乎 编辑:程序博客网 时间:2024/06/01 18:25
对xml文档进行增删改查操作后将其修改结果保存

一、可扩展标记语言xml:Extensible Markup Language
   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);

0 0
原创粉丝点击