XML

来源:互联网 发布:淘宝沙滩裙 编辑:程序博客网 时间:2024/06/09 22:30
  • 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[ 要显示的字符 ]]>
    7. XML中的注释
      • <!-- 注释内容 -->
    8. 格式良好的XML文档
      • 必须有XML声明语句。
      • 必须有且仅有一个根元素。
      • 标签大小写敏感。
      • 属性值用双引号。
      • 标签成对。
      • 元素正确嵌套。
  • 使用DOM读取XML数据

    • 1) Document对象
      • getElementsByTagName(String name):返回一个NodeList对象,它包含了所有给定标签名称的标签。
      • getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的对象。
    • 2) NodeList对象
      • getLength():返回列表的长度。
      • item(int index):返回指定位置的Node对象。
    • 3) Node对象
      • getChildNodes():包含此节点的所有子节点的NodeList。
      • getFirstChild():如果节点存在子节点,则返回第一个子节点。
      • getLastChild():如果节点存在子节点,则返回最后一个子节点。
      • getNextSibling():返回在DOM树中这个节点的下一个兄弟节点。
      • getPreviousSibling():返回在DOM树中这个节点的上一个兄弟节点。
      • getNodeName():返回节点的名称。
      • getNodeValue():返回节点的值。
      • getNodeType():返回节点的类型。
    • 4) 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();
原创粉丝点击