JAVA读写XML

1 篇文章 0 订阅
  • XML文档结构

    1. XML声明
      • <?xml version="1.0" encoding="UTF-8"?>表示XML声明,用以标明该文件是一个XML文档。XML文档总是以XML声明开始,他定义了XML的版本和所使用的编码等信息。
      • version:文档符合XML 1.0规范
      • encoding:文档字符编码,默认为“UTF-8”
    2. 标签
      • 在XML中用<>括起来的各种标签来标记数据,标签成对使用来界定字符数据。<元素名>是开始标签,</元素名>是结束标签,中间是标签的内容。
    3. 根元素
      • 每个XML文档必须有且仅有一个根元素。
      • 根元素是一个完全包括文档中其他所有元素的元素。
      • 根元素的起始标签要放在所有其他元素的起始标签之前。
      • 根元素的结束标签要放在所有其他元素的结束标签之后。
    4. 元素
      • XML文档的主要部分是元素,元素由开始标签、元素内容和结束标签组成。元素内容可以包含子元素、字符数据等。
      • 名称中可以包含字母、数字或者其他的字符。
      • 名称不能以数字或者标点符号开始。
      • 名称不能以字符“xml”(或者XML、Xml)开始。
      • 名称中不能还有空格。
    5. 属性
      • <元素名 属性名=“属性值”>
      • 一个元素可以有多个属性,多个属性之间用空格隔开。
      • 属性值中不能直接包含<、"、&。
      • 属性可以加在任何一个元素的起始标签上,但不能加在结束标签上。
    6. XML中的特殊字符的处理
      • 对特殊字符进行转义,使用预定义实体代替特殊字符。
    实体名称字符
    &lt;<
    &gt;>
    &amp;&
    &quot;"
    &apos;
     - 使用CDATA节处理。
     	- `<![CDATA[  要显示的字符  ]]>`
    
    1. XML中的注释
      • <!-- 注释内容 -->
    2. 格式良好的XML文档
      • 必须有XML声明语句。
      • 必须有且仅有一个根元素。
      • 标签大小写敏感。
      • 属性值用双引号。
      • 标签成对。
      • 元素正确嵌套。
  • 使用DOM读取XML数据

      1. Document对象
      • getElementsByTagName(String name):返回一个NodeList对象,它包含了所有给定标签名称的标签。
      • getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的对象。
      1. NodeList对象
      • getLength():返回列表的长度。
      • item(int index):返回指定位置的Node对象。
      1. Node对象
      • getChildNodes():包含此节点的所有子节点的NodeList。
      • getFirstChild():如果节点存在子节点,则返回第一个子节点。
      • getLastChild():如果节点存在子节点,则返回最后一个子节点。
      • getNextSibling():返回在DOM树中这个节点的下一个兄弟节点。
      • getPreviousSibling():返回在DOM树中这个节点的上一个兄弟节点。
      • getNodeName():返回节点的名称。
      • getNodeValue():返回节点的值。
      • getNodeType():返回节点的类型。
      1. Element对象
      • getAttribute(String attributename):返回标签中给定属性名称的属性的值。
      • getElementsByTagName(String name):返回居右给定标记名称的所有后代Elements的NodeList。
      • 注意: XML文档中的空白符也会被作为对象映射到DOM树中。因此,直接调用Node对象的getChildNodes()方法有时候会有问题。解决方法:
        • 使用Element的getElementsByTagName(String name)。
        • 调用Node的getChildNodes()方法得到NodeList对象。每次通过item()方法提取Node对象后判断node.getNodeType() == Node.ELEMENT_NODE,即判断是否是元素点。
  • 使用DOM4J解析XML

    • 1)-官网下载DOM4J相应的包加入工程。

    • 2)-Document对象相关

      • 读取XML文件,获得document对象。
        • SAXReader reader = new SAXReader();
        • Document document = reader.read(new File("xml文件名.xml"));
    • 3)-节点相关

      • (1)获取文档的根元素。
        • Element rootElm = document.getRootElement();
      • (2)取得某节点的单个子节点。
        • Element memberElm = rootElm.element("节点名");
      • (3)取得节点的文字。
        • String text = memberElm.getText();
        • 也可以用:String text = rootElm.elementText("节点名");
      • (4)取得某节点名为固定的所有子节点并进行遍历。
      	List nodes = rootElm.elements("节点名");
      	for(Iterator it = nodes.iterator();it.hasNext();){
      		Element elm = (Element) it.next();
      	}
      
      • (5)对某节点下的所有子节点进行遍历。
      	for(Iterator it = rootElm.elementIterator();it.hasNext();){
      		Element elm = (Element) it.next();
      	}
      
      • (6)在某节点下添加子节点。
        • Element ageElm = newMemberElm.addElement("age");
      • (7)设置节点文字。
        • ageElm.setText("设置的文字");
      • (8)取得节点的文字。
        • 待删除的父节点.remove(待删除的节点);
    • 4)-属性相关

      • (1)取得某节点下的某属性。
        • Attribute attribute = rootElm.attribute("属性名");
      • (2)取得属性的文字。
        • String text = attribute.getText();
        • 也可以用:String text = rootElm.element("节点名").attributeValue("属性名");
      • (3)遍历某节点的所有属性。
      	for(Iterator it = rootElm.attributeIterator();it.hasNext();){
      		Attribute attribute =(Attribute) it.next();
      		String text = attribute.getText();
      	}
      
      • (4)设置某节点的属性和文字。
        • newMemberElm.addAttribute("属性名","属性值");
      • (5)设置属性的文字。
        • attribute.setText("文字");
      • (6)删除某属性。
        • rootElm.remove(attribute);
    • 5)-将文档写入XML文件

      • 文档中全为英文,不设置编码格式,直接写入。
      	XMLWriter writer = new XMLWriter(new FileWriter("文件名.xml"));
      	writer.write(document);
      	writer.close();
      	
      
      • 文档中含有中文,设置编码格式再写入。
      	OutputFormat format = OutputFormat.createPrettyPrint();
      	format.setEncoding("GBK");//指定XML编码
      	XMLWriter writer = new XMLWriter(new FileWriter("文件名.xml"),format);
      	writer.write(document);
      	writer.close();
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值