XML解析小结

–dom

1、构建产生解析器的工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
2、构建解析器
DocumentBuilder builder = dbf.newDocumentBuilder();
3、解析器读取文件,把xml文件内容装在到内存转化为tree
Document doc = builder.parse(“src/com/xml/dom/stu.xml”);
4、获取一级标签(根标签)
Element root = doc.getDocumentElement();
5、//获取二级标签
NodeList list = root.getChildNodes();

6、把内存中的树转化为流写入文件
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc =builder.parse(“src/com/xml/dom/stu.xml”);
Element root = doc.getDocumentElement();
构建元素节点
Element stunode = doc.createElement(“student”);
给元素设置属性
stunode.setAttribute(“id”, stu.getId() + “”);
Element namenode = doc.createElement(“name”);
namenode.setTextContent(stu.getName());
Element agenode = doc.createElement(“age”);
agenode.setTextContent(stu.getAge() + “”);
节点的挂载
stunode.appendChild(namenode);
stunode.appendChild(agenode);
root.appendChild(stunode);

构建转换器工厂
TransformerFactory tff = TransformerFactory.newInstance();
构建转换器
Transformer tf = tff.newTransformer();
设置流写入文件的编码
tf.setOutputProperty(OutputKeys.ENCODING, “UTF-8”);
设置回车换行
tf.setOutputProperty(OutputKeys.INDENT, “yes”);
将doc以流的方式转入文件
tf.transform(new DOMSource(doc), new StreamResult(“src/com/xml/dom/stu.xml”));

–SAX

1、构建产生解析器的工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
2、构建解析器
SAXParser sax = factory.newSaxParser();
3、读取文件,同时绑定事件处理器,重写其中的各种方法以解析文件

sax.parse("src/com/xml/dom/stu.xml", new DefaultHandler(){
    startDocument() //当开始读取xml文档对象的时候触发(一次)

    startElement(String uri, String localName, String qName, Attributes attributes) 
                    当读到开始标签的时候触发
                    命名空间生效的情况下:
                    uri 命名空间的内容
                    localName 去掉前缀之后的标签名
                    qName 标签的完整的名字(前缀 + 标签)
                    命名空间不生效的情况:
                    uri和localName为空
                    qName表示标签的名字

    characters(char[] ch, int start, int length)
                    该方法处理的是空白文本及标签中间内容文本
                    第一个表示整个文档内容
                    第二个参数表示文本开始的角标
                    第三个表示文本的长度

    endElement(String uri, String localName, String qName)
                    当读到结束标签的时候触发

    endDocument()   当读取完根标签结束标签之后触发的方法
});

–dom4j

1、构建解析器
SAXReader dom = new SAXReader();
2、调用read方法
Document doc = dom.read(“src/com/xml/dom4j/stu.xml”);
3、获取根标签
Element root = doc.getRootElement();
4、获取二级标签,只获取元素标签,会自动忽略空白文本
List ers = root.elements();

5、写入的时候

//第一个参数表示路径
//第二个参数表示格式
//不写格式输出的时候,新增加的内容直接一行插入
XMLWriter writer = new XMLWriter(new FileOutputStream("src/com/xml/dom4j/stu.xml"));
//加回车,加tab↓
OutputFormat format = OutputFormat.createPrettyPrint();
//document中的tree全部转化为1行内容输入↓
OutputFormat format = OutputFormat.createCompactFormat();
XMLWriter writer = new XMLWriter(new FileOutputStream("src/com/xml/dom4j/stu.xml"),format);
writer.write(doc);
writer.flush();
writer.close();

你可能感兴趣的:(java知识点,xml)