A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangxiaosa 中级黑马   /  2017-3-16 22:34  /  869 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

xml解析有两种:
        *dom解析:一次把整个文档加载到内存
        *sax解析:从上到下逐行解析,内存消耗较小

1.java(sun)标准:
    *DOM解析
        *解析xml文件
                *创建DocumentBuilderFactory工厂
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                *获取DocumentBuilder
                        DocumentBuilder db = dbf.newDocumentBuilder();
                *解析xml文件获取Document
                        Document document = db.parse(file_path);
        *更新xml文件
                *创建TransformerFactory工厂
                        TransformerFactory tf = TransformerFactory.newInstance();
                *获取Transfomer
                        Transformer t = tf.newTransfomer();
                *把要更新的document封装到DOMSource中
                        Source xmlsource = new DOMSource(document);
                *把要写入document的文件封装到StreamResult中
                        Result outputTarget = new StreamResult(file_path);
                *使用transformer把document写入到目标文件中
                        t.transform(xmlsource,outputTarget);
        *Document对象常见的方法:
                *getXmlEncoding():返回Xml文件的编码字符集。
                *getElementById("id属性对应的值"):返回一个与该特点Id对应的节点Node
                *getElementsByTagName("标签的名称"):返回一个NodeList集合,包含所有以该名称命名的节点
                        *NodeList的主要方法:
                                *getLength():返回该NodeList的长度
                                *item(index):返回该索引上的Node对象
                                        *Node的主要方法:
                                                *appendChild(Node对象):为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去
                                                *replaceChild(新Node对象,旧Node对象):用新的Node替换旧的Node
                                                *removeChild(Node对象):删除给定的子节点
                                                *getNextSibling():返回DOM树种该节点的下一个兄弟节点
                                                *getPreviousSibling():返回DOM树中该节点的前一个兄弟节点
                                                *getParentNode():返回该节点的父节点对象
                                                *getFirstChild():返回第一个子节点
                                                *getChildNodes():返回一个NodeList集合,包含该元素下所有的子节点
                                                *getAttribute("属性名"):返回该元素中指定属性对应的值
                                                *getNodeName():返回改Node的名字
                                                *getAttributeNode("属性名称"):返回指定名称的属性节点对象
                                                *getNodeValue():返回该文本节点的内容
                                                *getNodeType():返回该Node的类型(如:元素、属性、文本等)
                                                *可以转换为Element:Element element = (Element)node;
                                                        *Element的主要方法:
                                                                *Node对象的方法Element也有(继承过来的)
                                                                *getTextContent():返回该元素的文本内容
                *getDocumentElement():获取DOM树的根节点               
                *createElement("元素名称"):创建一个特定名称的元素对象
    *SAX解析:
        *创建SAXParserFactory工厂
                *SAXParserFactory spf = SAXParserFactory.newInstance();
        *获得解析器SAXParser对象
                *SAXParser sp = spf.newSAXParser();
        *解析xml文档
                *sp.parse("file_path",new DefultHandler(){
                        *覆盖需要的方法:
                                *startDocument():文档解析开始时此方法被调用
                                *startElement(uri,localName,qName,attributes):元素解析开始时此方法被调用
                                        uri - 名称空间 URI,如果元素没有则为空字符串。
                                        localName - 本地名称,如果没有名称空间,则为空字符串。
                                        qName - 限定的名称
                                        attributes - 附加到元素的属性。
                                *characters(char[],start,length):文本解析时被调用
                                        通过new String(ch,start,length)获得字符串
                                *endElement(uri,localName,qName):元素解析结束时被调用
                                *endDocument():文档解析结束时被调用
                        });
2.Dom4j解析(一个非常优秀的Java XML API):
        *使用Dom4j开发需要下载dom4j相应的jar文件
        *导入jar文件并build path

        *解析:
                *解析XML形式的文本,得到document对象.
                        *String str = "<name><title></title></name>";
                         Document document = DocumentHelper.parseText(str);
                *主动创建document对象
                        *Document document = DocumentHelper.createDocument();
                *读取XML文件,获得document对象   
                        *创建SAXReader对象
                                *SAXReader reader = new SAXReader();
                        *使用SAXReader对象读取文件并生成Dcumemt对象
                                *Document document = reader.read("文件路径");
                                        *Document常用方法:
                                                *asXML():返回一个字符串, 包含整个xml文档
                                                *addElement("元素名称"):为Document添加一个元素,并返回这个元素对象
                                                *getRootElement():获取到根元素
                                                        *Element主要方法
                                                                *添加一个CDATA节点.Element contentElm = infoElm.addElement("content");
                                                                 contentElm.addCDAT(diary.getContent());
                                                                *asXML():返回该元素的字符串形式
                                                                *remove(Element e):只能删除自己的子元素
                                                                *setText(String str):为元素设置文本内容
                                                                *getText():获取该元素的文本内容
                                                                *elements("元素名称"):获取该元素下指定名称元素的list集合
                                                                *element("元素名称"):获取该元素下指定名称的元素
                                                                *elements():获取元素的子元素对象的list集合
                                                                        在得到的list中插入Element就是给该元素添加子元素
                                                                *addAttribute("属性名","属性值"):添加属性
                                                                *remove(Attribute attr):删除元素中指定属性
                                                                *attribute(String str):获取该元素中的指定属性
                                                                *attributes():获取元素属性对象(Attribute)的list集合
                                                                *attributeValue(String str):根据属性名获取属性值
                                                                        *Attribute的主要方法:
                                                                                *setText(String str):设置属性值
                                                                                *getText(String str):获取属性值
        XPath查询:
                *XPath是一门在XML文档中查询信息的语言
                *XPath可用来在XML文档账度元素和属性进行遍历
                *XPath简化了Dom4j查找节点的过程
                *使用XPath必须导入jaxen-1.1-beta-6.jar包,否则会报错:NoClassDefFoundError: org/jaxen/JaxenException
                *用法:
                        *selectNodes("XPath表达式"):返回一个list集合
                        *selectSingleNode("XPath表达式"):返回一个Node对象
                          如果符合条件的节点有多个,那么返回第一个
                *XPath表达式:
                        /students/student:通过绝对路径获取students根节点下所有的直接子节点student元素对象
                        students/student:通过相对路径获取students根节点下所有的直接子节点student元素对象
                        //name:获取所有name元素对象,不考虑位置
                        student//name:获取student元素下所有的name元素对象
                        //@id:获取所有的Id属性对象
                        //student[@id]:获取所有带id属性student元素对象
                        //student[@id='002']:获取id等于002的student元素对象
                        //student[age>20]:获取所有子元素age的值大于20的student元素对象

2 个回复

倒序浏览
学习啦感谢大哥。一起进步
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马