Dom4j工具,是非官方的,不在jdk中。
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar
animals.xml
<?xmlversion="1.0"encoding="UTF-8"?> <Animals> <Catid="c001"name="喵喵"> <Home>火星</Home> <BornDate>2010-01-01</BornDate> </Cat> <Catid="c002"name="咪咪"> <Home>冥王星</Home> <BornDate>2012-09-01</BornDate> </Cat> <Catid="c003"name="Tom"> <Home>地球</Home> <BornDate>2011-12-23</BornDate> </Cat> <Dogid="d001"name="旺财"> <Home>木星</Home> <BornDate>2007-10-16</BornDate> </Dog> <Dogid="d002"name="汪汪"> <Home>金星</Home> <BornDate>2008-05-12</BornDate> </Dog> </Animals>
1、读取XML
1.1、获取Document对象
packagecom.rk.xml.f_dom4j_read; importjava.io.File; importorg.dom4j.Document; importorg.dom4j.DocumentException; importorg.dom4j.io.SAXReader; /** *第一个Dom4j读取xml文档的例子 *获得Document对象 *@authorRK */ publicclassDemo01 { publicstaticvoidmain(String[]args) { try { //1.创建一个xml解析器对象 SAXReaderreader=newSAXReader(); //2.读取xml文档,返回Document对象 Documentdoc=reader.read(newFile("./src/animals.xml")); System.out.println(doc); } catch(DocumentExceptione) { e.printStackTrace(); thrownewRuntimeException(e); } } }
1.2、读取xml文件内容:节点、标签、属性、文本
packagecom.rk.xml.f_dom4j_read; importjava.util.List; importjava.io.File; importjava.util.Iterator; importorg.dom4j.Document; importorg.dom4j.DocumentException; importorg.dom4j.Element; importorg.dom4j.Node; importorg.dom4j.Attribute; importorg.dom4j.io.SAXReader; importorg.junit.Test; /** *第二个dom4j读取xml文件内容 *节点 *标签 *属性 *文本 *@authorRK * */ publicclassDemo02 { /** *获取节点 *1、通过Document文档获得根元素Document.getRootElement() *2、获得标签元素下的所有子节点Branch.nodeIterator() *3、获得节点的名字、类型:Node.getName(),Node.getNodeType(),Node.getNodeTypeName() */ @Test publicvoidtestNode() { try { //1.读取xml文档,返回Document对象 SAXReaderreader=newSAXReader(); Documentdoc=reader.read(newFile("./src/products.xml")); //2、得到根标签 ElementrootElement=doc.getRootElement(); //3、遍历文档的所有节点 getChildNodes(rootElement); } catch(DocumentExceptione) { e.printStackTrace(); } } privatevoidgetChildNodes(Elementelem) { //nodeIterator:得到当前节点下的所有子节点对象(不包含孙以下的节点) @SuppressWarnings("unchecked") Iterator<Node>it=elem.nodeIterator(); while(it.hasNext()) { Nodenode=it.next(); System.out.println(node.getName()+"==="+node.getNodeType()+"==="+node.getNodeTypeName()); //判断是否是标签元素 if(nodeinstanceofElement) { getChildNodes((Element)node); } } } /** *获取标签 *1、获取特定的一个标签Element.element(Stringname):得到当前标签下指定名称的第一个子标签 *2、获取所有的子标签Element.elementIterator(Stringname):得到当前标签下指定名称的所有子标签 */ @Test publicvoidtestElement()throwsException { //1.读取xml文档,返回Document对象 SAXReaderreader=newSAXReader(); Documentdoc=reader.read(newFile("./src/animals.xml")); //2.得到根标签 System.out.println("===================================2"); ElementrootElement=doc.getRootElement(); //获得节点相关信息 Stringname=rootElement.getName();//得到节点名称 shorttype=rootElement.getNodeType();//得到节点类型 StringtypeName=rootElement.getNodeTypeName();//得到节点类型名称 System.out.println(name+"\t"+type+"\t"+typeName); //3.得到当前标签下指定名称的第一个子标签 System.out.println("===================================3"); ElementproductElement=rootElement.element("Dog"); System.out.println(productElement.getName()); //4.得到当前标签下指定名称的所有子标签 System.out.println("===================================4"); @SuppressWarnings("unchecked") Iterator<Element>it=rootElement.elementIterator("Cat"); while(it.hasNext()) { Elementelem=it.next(); System.out.println(elem.getName()); } //5.得到当前标签下的的所有子标签 System.out.println("===================================5"); @SuppressWarnings("unchecked") List<Element>list=rootElement.elements(); //遍历List的方法 //1)传统for循环2)增强for循环3)迭代器 // for(inti=0;i<list.size();i++) // { // System.out.println(list.get(i).getName()); // } // for(Elementelem:list) // { // System.out.println(elem.getName()); // } Iterator<Element>iterator=list.iterator(); while(iterator.hasNext()) { Elementelem=iterator.next(); System.out.println(elem.getName()); } //6、获取更深层次的标签(方法只能一层层地获取) System.out.println("===================================6"); ElementnameElement=rootElement.element("Dog").element("Home"); System.out.println(nameElement.getName()); System.out.println(nameElement.getText()); System.out.println(nameElement.getPath()); System.out.println(nameElement.getUniquePath()); } /** *获取属性 *1、获取特定的一个属性 *2、获取标签元素下的所有属性 */ @Test publicvoidtestAttribute()throwsException { //读取xml文档,返回Document对象 SAXReaderreader=newSAXReader(); Documentdoc=reader.read(newFile("./src/animals.xml")); ElementrootElement=doc.getRootElement(); //获取属性:(先获的属性所在的标签对象,然后才能获取属性) //1.得到标签对象 ElementdogElement=rootElement.element("Dog"); //2.得到属性 //2.1得到指定名称的属性值 System.out.println("===================================2.1"); StringidValue=dogElement.attributeValue("id"); System.out.println(idValue); //2.2得到指定属性名称的属性对象 System.out.println("===================================2.2"); AttributeidAttr=dogElement.attribute("name"); //getName:属性名称getValue:属性值 System.out.println(idAttr.getName()+"="+idAttr.getValue()); //2.3得到所有属性对象,返回List集合 System.out.println("===================================2.3"); @SuppressWarnings("unchecked") List<Attribute>list=dogElement.attributes(); //遍历属性 for(Attributeattr:list) { System.out.println(attr.getName()+"="+attr.getValue()); } //2.4得到所有属性对象,返回迭代器 System.out.println("===================================2.4"); @SuppressWarnings("unchecked") Iterator<Attribute>iterator=rootElement.element("Cat").attributeIterator(); while(iterator.hasNext()) { Attributeattr=iterator.next(); System.out.println(attr.getName()+"="+attr.getValue()); } } /** *获取文本 *1、获取当前标签元素的文本Element.getText() *2、获取子标签元素的文本Element.elementText(Stringname) */ @Test publicvoidtestText()throwsException { //读取xml文档,返回Document对象 SAXReaderreader=newSAXReader(); Documentdoc=reader.read(newFile("./src/animals.xml")); ElementrootElement=doc.getRootElement(); //注意:空格和换行也是xml的内容 Stringcontent=rootElement.getText(); System.out.println("==Start=="+content+"==End=="); //获取文本(先获取标签,再获取标签上的文本) ElementbornDateElement=rootElement.element("Cat").element("BornDate"); //1.得到文本 Stringtext=bornDateElement.getText(); System.out.println(bornDateElement.getName()+"元素的文本是"+text); //2.得到指定子标签名的文本内容 Stringtext2=rootElement.element("Dog").elementText("Home"); System.out.println(text2); } }
1.3、练习-完整读取xml文档内容
packagecom.rk.xml.f_dom4j_read; importjava.io.File; importjava.util.Iterator; importorg.dom4j.Document; importorg.dom4j.Node; importorg.dom4j.Element; importorg.dom4j.Attribute; importorg.dom4j.io.SAXReader; /** *练习-完整读取xml文档内容 *@authorRK * */ publicclassDemo03 { publicstaticvoidmain(String[]args)throwsException { //读取xml文档 SAXReaderreader=newSAXReader(); Documentdoc=reader.read(newFile("./src/animals.xml")); //读取根标签 ElementrootElement=doc.getRootElement(); StringBuildersb=newStringBuilder(); getChildNodes(rootElement,sb); System.out.println(sb.toString()); } /** *获取当前标签的所有子节点 */ privatestaticvoidgetChildNodes(ElementcurrentElement,StringBuildersb) { Stringname=currentElement.getName(); //开始标签Start sb.append("<"+name); //得到标签的属性列表 @SuppressWarnings("unchecked") Iterator<Attribute>iterator=currentElement.attributeIterator(); while(iterator.hasNext()) { Attributeattr=iterator.next(); StringattrName=attr.getName(); StringattrValue=attr.getValue(); sb.append(""+attrName+"=\""+attrValue+"\""); } //开始标签End sb.append(">"); //获取子节点 @SuppressWarnings("unchecked") Iterator<Node>it=currentElement.nodeIterator(); while(it.hasNext()) { Nodenode=it.next(); shorttype=node.getNodeType(); if(type==Node.ELEMENT_NODE) { getChildNodes((Element)node,sb); } elseif(type==Node.TEXT_NODE) { sb.append(node.getText()); } else { //其它情况,不做处理 } } //结束标签 sb.append("</"+name+">"); } }