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元素对象
|
|