Java-用jdom解析xml文件时如何解决中文问题、如何解析
java解析XML文件

java解析XML⽂件dom4j是⼀个的XML API,类似于jdom,⽤来读写XML⽂件的。
dom4j是⼀个⾮常⾮常优秀的Java XML API,具有性能优异、功能强⼤和极端易⽤使⽤的特点,同时它也是⼀个开放源代码的,可以在SourceForge上找到它.对主流的Java XML API进⾏的性能、功能和易⽤性的评测,dom4j⽆论在那个⽅⾯都是⾮常出⾊的。
如今你可以看到越来越多的Java都在使⽤dom4j来读写XML,例如,包括sun公司⾃⼰的JAXM也⽤了Dom4j。
使⽤Dom4j开发,需下载dom4j相应的jar⽂件对于下载的zip⽂件进⾏解压后的效果如下:打开dom4j-1.6.1的解压⽂件在这⾥可以看到有docs帮助的⽂件夹,也有需要使⽤dom4j解析xml⽂件的dom4j-1.6.1.jar⽂件.我们只需要把dom4j-1.6.1.jar⽂件构建到我们开发的项⽬中就可以使⽤dom4j开发了.下⾯我以Myeclipse创建Java项⽬的构建⽅法为例说明.⾸先创建⼀个demo项⽬,在demo项⽬中创建⼀个lib⽂件,把dom4j-1.6.1.jar⽂件拷贝到lib中,然后右键dom4j-1.6.1jar⽂件点击Add to Build Path即可构建到项⽬中去了.备注:如果进⾏的是web项⽬开发,我们只需要把它拷贝到web-inf/lib中去即可,会⾃动构建到web项⽬中.在项⽬开发的过程中可以参考docs⽂件夹的(帮助⽂档),找到index.html打开,点击Quick start可以通过帮助⽂档进⾏学习 dom4j进⾏xml的解析.下⾯我对我认为api中重要的⽅法进⾏翻译说明如下:⼀、DOM4j中,获得Document对象的⽅式有三种:1.读取XML⽂件,获得document对象SAXReader reader = new SAXReader();Document document = reader.read(new File("csdn.xml"));2.解析XML形式的⽂本,得到document对象.String text = "<csdn></csdn>";Document document = DocumentHelper.parseText(text);3.主动创建document对象.Document document = DocumentHelper.createDocument(); //创建根节点Element root = document.addElement("csdn");⼆、节点对象操作的⽅法1 1.获取⽂档的根节点.2 Element root = document.getRootElement();3 2.取得某个节点的⼦节点.4 Element element=node.element(“四⼤名著");5 3.取得节点的⽂字6 String text=node.getText();7 4.取得某节点下所有名为“csdn”的⼦节点,并进⾏遍历.8 List nodes = rootElm.elements("csdn");9for (Iterator it = nodes.iterator(); it.hasNext();) {10 Element elm = (Element) it.next();11// do something12}13 5.对某节点下的所有⼦节点进⾏遍历.14for(Iterator it=root.elementIterator();it.hasNext();){15 Element element = (Element) it.next();16// do something17 }18 6.在某节点下添加⼦节点19E lement elm = newElm.addElement("朝代");20 7.设置节点⽂字. elm.setText("明朝");21 8.删除某节点.//childElement是待删除的节点,parentElement是其⽗节点 parentElement.remove(childElment);22 9.添加⼀个CDATA节点.E lement contentElm = infoElm.addElement("content");c ontentElm.addCDATA(“cdata区域”);三、节点对象的属性⽅法操作1.取得某节点下的某属性 Element root=document.getRootElement(); //属性名nameAttribute attribute=root.attribute("id");2.取得属性的⽂字String text=attribute.getText();3.删除某属性Attribute attribute=root.attribute("size");root.remove(attribute);4.遍历某节点的所有属性Element root=document.getRootElement();for(Iterator it=root.attributeIterator();it.hasNext();){Attribute attribute = (Attribute) it.next();String text=attribute.getText();System.out.println(text);}5.设置某节点的属性和⽂字. newMemberElm.addAttribute("name", "sitinspring");6.设置属性的⽂字 Attribute attribute=root.attribute("name"); attribute.setText("csdn");四、将⽂档写⼊XML⽂件1.⽂档中全为英⽂,不设置编码,直接写⼊的形式.XMLWriter writer = new XMLWriter(new FileWriter("ot.xml"));writer.write(document);writer.close();2.⽂档中含有中⽂,设置编码格式写⼊的形式.OutputFormat format = OutputFormat.createPrettyPrint();// 创建⽂件输出的时候,⾃动缩进的格式format.setEncoding("UTF-8");//设置编码X MLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);w riter.write(document);w riter.close();五、字符串与XML的转换1.将字符串转化为XMLString text = "<csdn> <java>Java班</java></csdn>";Document document = DocumentHelper.parseText(text);2.将⽂档或节点的XML转化为字符串.SAXReader reader = new SAXReader();Document document = reader.read(new File("csdn.xml"));E lement root=document.getRootElement();S tring docXmlText=document.asXML();String rootXmlText=root.asXML();Element memberElm=root.element("csdn");S tring memberXmlText=memberElm.asXML();六、案例(解析sida.xml⽂件并对其进⾏curd的操作)1.sida.xml描述四⼤名著的操作,⽂件内容如下<?xml version="1.0" encoding="UTF-8"?><四⼤名著><西游记 id="x001"><作者>吴承恩1</作者><作者>吴承恩2</作者><朝代>明朝</朝代></西游记><红楼梦 id="x002"><作者>曹雪芹</作者></红楼梦></四⼤名著>2.解析类测试操作package dom4j;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.OutputStreamWriter;import java.nio.charset.Charset;import java.nio.charset.CharsetEncoder;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class Demo01 {@Testpublic void test() throws Exception {// 创建saxReader对象SAXReader reader = new SAXReader();// 通过read⽅法读取⼀个⽂件转换成Document对象Document document = reader.read(new File("src/dom4j/sida.xml"));//获取根节点元素对象Element node = document.getRootElement();//遍历所有的元素节点listNodes(node);// 获取四⼤名著元素节点中,⼦节点名称为红楼梦元素节点。
DOM解析XML(JAVA)

student.setGroup(Integer.parseInt(studentElement.getAttribute("group"))); NodeList studentChildren=studentElement.getChildNodes(); for(int j=0;j<studentChildren.getLength();j++) { if(studentChildren.item(j).getNodeType()==Node.ELEMENT_NODE) { if("name".equals(studentChildren.item(j).getNodeName())) { //获得name的值
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
public class DomParseXml {
private List<student> list;
student.setAge(Integer.parseInt(studentChildren.item(j).getFirstChild().getNode Value()));
} if("email".equals(studentChildren.item(j).getNodeName())) {
java解析xml文件四种方式

java解析xml⽂件四种⽅式1.介绍1)DOM(JAXP Crimson解析器)DOM是⽤与平台和语⾔⽆关的⽅式表⽰XML⽂档的官⽅W3C标准。
DOM是以层次结构组织的节点或信息⽚断的集合。
这个层次结构允许开发⼈员在树中寻找特定信息。
分析该结构通常需要加载整个⽂档和构造层次结构,然后才能做任何⼯作。
由于它是基于信息层次的,因⽽DOM被认为是基于树或基于对象的。
DOM以及⼴义的基于树的处理具有⼏个优点。
⾸先,由于树在内存中是持久的,因此可以修改它以便应⽤程序能对数据和结构作出更改。
它还可以在任何时候在树中上下导航,⽽不是像SAX那样是⼀次性的处理。
DOM使⽤起来也要简单得多。
2)SAXSAX处理的优点⾮常类似于流媒体的优点。
分析能够⽴即开始,⽽不是等待所有的数据被处理。
⽽且,由于应⽤程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于⼤型⽂档来说是个巨⼤的优点。
事实上,应⽤程序甚⾄不必解析整个⽂档;它可以在某个条件得到满⾜时停⽌解析。
⼀般来说,SAX还⽐它的替代者DOM快许多。
选择DOM还是选择SAX?对于需要⾃⼰编写代码来处理XML⽂档的开发⼈员来说,选择DOM还是SAX解析模型是⼀个⾮常重要的设计决策。
DOM采⽤建⽴树形结构的⽅式访问XML⽂档,⽽SAX采⽤的事件模型。
DOM解析器把XML⽂档转化为⼀个包含其内容的树,并可以对树进⾏遍历。
⽤DOM解析模型的优点是编程容易,开发⼈员只需要调⽤建树的指令,然后利⽤navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
然⽽由于使⽤DOM解析器的时候需要处理整个XML⽂档,所以对性能和内存的要求⽐较⾼,尤其是遇到很⼤的XML⽂件的时候。
由于它的遍历能⼒,DOM解析器常⽤于XML⽂档需要频繁的改变的服务中。
SAX解析器采⽤了基于事件的模型,它在解析XML⽂档的时候可以触发⼀系列的事件,当发现给定的tag的时候,它可以激活⼀个回调⽅法,告诉该⽅法制定的标签已经找到。
通过实例跟我学Java XML解析及应用——在J2EE Web应用系统中应用JDom实现对XML配置数据进行解析的应用实例

1.1通过代码实例跟我学Java XML解析及应用——在J2EE Web应用系统中应用JDom实现对XML配置数据进行解析的应用实例1、XML文件的内容为<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE dbconfig SYSTEM "dbConnectionConfig.dtd"><dbconfig><JDBC_DBDriver_ClassName>com.mysql.jdbc.Driver</JDBC_DBDriver_ClassName> <JDBC_DSN_URL>jdbc:mysql://localhost:3306/webbank</JDBC_DSN_URL><JDBC_dbUserName>root</JDBC_dbUserName><JDBC_dbUserPassWord>root</JDBC_dbUserPassWord></dbconfig>2、添加一个实体类(PO类)(1)在项目中新增加一个实体类(PO类)(2)在该实体类中添加如下的成员属性,这些属性参数为数据库连接相关的工作参数(3)DBConnectionPO实体类的代码示例package com.px1987.webbank.dao.po;public class DBConnectionPO {String dbDriverClassName=null;String dsnURL=null;String dbUserPassWord=null;String dbUserName=null;public DBConnectionPO() {}public String getDbDriverClassName() {return dbDriverClassName;}public void setDbDriverClassName(String dbDriverClassName) { this.dbDriverClassName = dbDriverClassName;}public String getDsnURL() {return dsnURL;}public void setDsnURL(String dsnURL) {this.dsnURL = dsnURL;}public String getDbUserPassWord() {return dbUserPassWord;}public void setDbUserPassWord(String dbUserPassWord) {this.dbUserPassWord = dbUserPassWord;}public String getDbUserName() {return dbUserName;}public void setDbUserName(String dbUserName) {this.dbUserName = dbUserName;}}3、设计一个XML解析的程序类——利用JDom(1)添加一个类GetDBConnectionConfigByJDom,包名称为com.px1987.webbank.config(2)编程GetDBConnectionConfigByJDom程序类的代码示例package com.px1987.webbank.config;import java.io.File;import java.io.IOException;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import com.px1987.webbank.dao.po.DBConnectionPO;public class GetDBConnectionConfigByJDom {DBConnectionPO oneDBConnectionPO=null;public DBConnectionPO getOneDBConnectionPO() {return oneDBConnectionPO;}public GetDBConnectionConfigByJDom() {oneDBConnectionPO=new DBConnectionPO();}public DBConnectionPO xmlJDomParse(String xmlFileName) throws JDOMException, IOException{Document xmlDocument=xmlDocumentInitial(xmlFileName);parseXMLDocumentTags(xmlDocument);return oneDBConnectionPO;}public Document xmlDocumentInitial(String xmlFileName) throws JDOMException, IOException{Document xmlDocument = null;SAXBuilder oneSAXBuilder = new SAXBuilder();/** 注意在Web方式下的文件定位的方法————在Servlet中可以利用ServletContext.getRealPath("/")+文件名称;* 而在普通的JavaBean组件中则利用当前类的getResourceAsStream方法(Class类)* 此时的文件名称应该以“/”开头、并且放在WEB-INF/classes目录中*/// InputStreamoneInputStream=GetDBConnectionConfigByJDom.class.getResourceAsStream(xmlFileName);// xmlDocument = oneSAXBuilder.build(oneInputStream); //只能在Java类中访问xmlDocument = oneSAXBuilder.build(new File(xmlFileName)); //由于是在页面中访问return xmlDocument;}/* 解析的方法一public void parseXMLDocumentTags(Document xmlDocument){Element rootElement = xmlDocument.getRootElement(); // 得到根元素java.util.List allSubElements = rootElement.getChildren(); // 得到根元素所有子元素的集合Iterator allElementItems=allSubElements.iterator();while(allElementItems.hasNext()){Element oneElement=(Element)allElementItems.next();String someOneElementName=oneElement.getName();if(someOneElementName.equals("JDBC_DBDriver_ClassName")){oneDBConnectionPO.setDbDriverClassName(oneElement.getText());}if(someOneElementName.equals("JDBC_DSN_URL")){oneDBConnectionPO.setDsnURL(oneElement.getText());}if(someOneElementName.equals("JDBC_dbUserName")){oneDBConnectionPO.setDbUserName(oneElement.getText());}if(someOneElementName.equals("JDBC_dbUserPassWord")){oneDBConnectionPO.setDbUserPassWord(oneElement.getText());}}}*/public void parseXMLDocumentTags(Document xmlDocument){ //解析的方法二Element rootElement = xmlDocument.getRootElement(); // 得到根元素oneDBConnectionPO.setDbDriverClassName(rootElement.getChildTextTrim("JDBC_DBDr iver_ClassName"));oneDBConnectionPO.setDsnURL(rootElement.getChildTextTrim("JDBC_DSN_URL"));oneDBConnectionPO.setDbUserName(rootElement.getChildTextTrim("JDBC_dbUserName "));oneDBConnectionPO.setDbUserPassWord(rootElement.getChildTextTrim("JDBC_dbUserPa ssWord"));}}3、测试本示例的测试页面<%@ page language="java" pageEncoding="GB18030"%><jsp:useBean id="dbConnectionConfigBean" class="com.px1987.webbank.config.GetDBConnectionConfigByJDom" scope="page"/><%StringxmlFileName=application.getRealPath("/")+"WEB-INF/classes/dbConnectionConfig.xml"; com.px1987.webbank.dao.po.DBConnectionPO oneDBConnectionPO=dbConnectionConfigBean.xmlJDomParse(xmlFileName);%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'showDBConfig.jsp' starting page</title></head><body><table border="1"><tr><td colspan="2">下面是利用JDom技术对XML文件dbConnectionConfig.xml 的解析的结果</td></tr><tr><td>驱动程序类名</td><td><%=oneDBConnectionPO.getDbDriverClassName() %></td> </tr><tr><td>数据库的URL</td><td><%=oneDBConnectionPO.getDsnURL() %></td></tr><tr><td>数据库的帐号</td><td><%=oneDBConnectionPO.getDbUserName() %></td> </tr><tr><td>帐号所对应的密码</td><td><%=oneDBConnectionPO.getDbUserPassWord() %></td> </tr></table></body></html>4、执行它http://127.0.0.1:8080/webbank/showDBConfig.jsp。
java解析xml文件

java解析xml⽂件⼀、SAX解析1、将要解析的xml⽂件为TestDom.xml<?xml version="1.0" encoding="utf-8"?><bookStore><book id="1" class="tonghua"><name>安徒⽣童话</name><author>安徒⽣</author><year>2008</year></book><book id="2" class="xiyouji"><name>西游记</name><author>罗贯中</author></book></bookStore>2、Book类package youth.hong.TestDom;public class Book {private String id = "";private String className = "";private String name = "";private String author = "";private String year = "";public Book(String id, String name, String author, String year) {super();this.id = id; = name;this.author = author;this.year = year;}public Book() {}@Overridepublic String toString() {return "Book [id=" + id + ", className=" + className + ", name=" + name + ", author=" + author + ", year=" + year + "]";}public String getClassName() {return className;}public void setClassName(String className) {this.className = className;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getYear() {return year;}public void setYear(String year) {this.year = year;}}3、解析xml的主类package youth.hong.Handler;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import youth.hong.TestDom.Book;public class SAXHandler extends DefaultHandler{int bookIndex = 0;private List<Book> bookList = new ArrayList<Book>();private Book book = null;private String value = null;//⽤来标志解析开始@Overridepublic void startDocument() throws SAXException {System.out.println("解析开始");}//⽤来标志解析结束@Overridepublic void endDocument() throws SAXException {System.out.println("解析结束");}//⽤来遍历元素//开始标签@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {if(qName.equals("book")) {bookIndex++;book = new Book();System.out.println("============================第" + bookIndex + "本书开始了=========================");//已知book下属性元素的名称//System.out.println(attributes.getValue("id"));for(int i = 0; i < attributes.getLength(); i++) {String name = attributes.getQName(i);if(name.equals("id")) {book.setId(attributes.getValue(i));}else if(name.equals("class")) {book.setClassName(attributes.getValue(i));}book.setId(attributes.getValue(i));//System.out.println(name);System.out.println("第" + bookIndex + "本书的" + attributes.getQName(i) + "是:" + attributes.getValue(i)/*attributes.getValue(Qname)*/); }}else if(!qName.equals("bookStore")) {System.out.print("第" + bookIndex + "本书的" + qName + "是:");}}//遍历标签内的内容@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {value = new String(ch,start,length);//如果标签下没有内容,如bookstore与book之间就没有内容,将不打印if(!value.trim().equals("")) {System.out.println(value);}}//遍历元素的结束标签@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if(qName.equals("book")) {bookList.add(book);book = null;System.out.println("============================第" + bookIndex + "本书结束了========================="); }else if(qName.equals("name")) {book.setName(value);}else if(qName.equals("author")) {book.setAuthor(value);}else if(qName.equals("year")) {book.setYear(value);}}public List<Book> getBookList() {return bookList;}}4、测试类(包括创建xml⽂件)package youth.hong.TestDom;import java.io.File;import java.io.FileOutputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.sax.SAXTransformerFactory;import javax.xml.transform.sax.TransformerHandler;import javax.xml.transform.stream.StreamResult;import org.xml.sax.helpers.AttributesImpl;import youth.hong.Handler.SAXHandler;public class SAXTest {public List<Book> parseXml() {SAXHandler saxhandler = null;SAXParserFactory parserFactory = SAXParserFactory.newInstance();try {SAXParser saxParser = parserFactory.newSAXParser();saxhandler = new SAXHandler();saxParser.parse("src/TestJDom/TestDom.xml", saxhandler);for (Book book : saxhandler.getBookList()) {System.out.println(book);}System.out.println();} catch (Exception e) {e.printStackTrace();};return saxhandler.getBookList();}/*** ⽣成xml⽂件*/public void createXml() {List<Book> bookList = this.parseXml();//转化⼯⼚SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();try {TransformerHandler handler = tff.newTransformerHandler();//转换器Transformer tf = handler.getTransformer();//设置输出编码为UTF-8tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");//输出格式缩进tf.setOutputProperty(OutputKeys.INDENT, "yes");//要输出的⽂件File file = new File("src/TestJDom/newBook.xml");//如果⽂件不存在就创建⼀个if(!file.exists()) {file.createNewFile();}Result result = new StreamResult(new FileOutputStream(file));//必须在result定义完再加⼊内容才有效handler.setResult(result);handler.startDocument();AttributesImpl atts = new AttributesImpl();handler.startElement("", "", "bookStore", atts);//遍历所有书籍将他们加⼊到xml中for(Book book : bookList) {atts.clear();/*** public void addAttribute(String uri,String localName,命名空间本地名String qName,元素名String type,元素类型String value)值*/atts.addAttribute("", "", "id", null, book.getId());atts.addAttribute("", "", "class", null, book.getClassName());//注意按照SAX模式解析xml⽂件的顺序去定义标签handler.startElement("", "", "book", atts);atts.clear();handler.startElement("", "", "name", atts);char[] ch = book.getName().toCharArray();handler.characters(ch, 0, ch.length);handler.endElement("", "", "name");handler.startElement("", "", "author", atts);ch = book.getAuthor().toCharArray();handler.characters(ch, 0, ch.length);handler.endElement("", "", "author");handler.startElement("", "", "year", atts);ch = book.getYear().toCharArray();handler.characters(ch, 0, ch.length);handler.endElement("", "", "year");handler.endElement("", "", "book");}handler.endElement("", "", "bookStore");handler.endDocument();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {SAXTest saxTest = new SAXTest();//saxTest.createXml();saxTest.parseXml();}}5、⽣成newBook.xml⽂件<?xml version="1.0" encoding="utf-8"?><bookStore><book id="tonghua" class="tonghua"><name>安徒⽣童话</name><author>安徒⽣</author><year>2008</year></book><book id="xiyouji" class="xiyouji"><name>西游记</name><author>罗贯中</author><year/></book></bookStore>⼆、jdom解析1、解析与创建package youth.hong.TestJDom;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import org.jdom2.Attribute;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import org.jdom2.output.Format;import org.jdom2.output.XMLOutputter;import youth.hong.TestDom.Book;public class TestJDom {private static List<Book> bookList = new ArrayList<Book>();public void parseXML() {SAXBuilder saxBuilder = new SAXBuilder();try {Document document = saxBuilder.build(new InputStreamReader(new FileInputStream("src/TestJDom/TestDom.xml"),"utf-8"));/*Document document2 = saxBuilder.build(new FileReader("src/TestJDom/TestDom.xml"));*///没有字符编码,所以最好使⽤上⾯那种Element element = document.getRootElement();int i = 0;// elment.getAttributeValue()返回⼀个list对象List<Element> bookList = element.getChildren();// 遍历每个book的属性for (Element book : bookList) {Book bookEntity = new Book();i++;System.out.println("======================第" + i + "开始==========================");// 已知属性名// System.out.println(book.getAttributeValue("class"));List<Attribute> attrList = book.getAttributes();for (Attribute attribute : attrList) {System.out.println("属性名称:" + attribute.getName() + "----属性值是:" + attribute.getValue());if(attribute.getName().equals("id")) {bookEntity.setId(attribute.getValue());}else if(attribute.getName().equals("class")) {bookEntity.setClassName(attribute.getValue());}}List<Element> children = book.getChildren();for (Element element2 : children) {System.out.println("节点名--" + element2.getName() + "--节点值--" + element2.getValue());if(element2.getName().equals("name")) {bookEntity.setName(element2.getValue());}else if(element2.getName().equals("author")) {bookEntity.setAuthor(element2.getValue());}else if(element2.getName().equals("year")) {bookEntity.setYear(element2.getValue());}}System.out.println("======================第" + i + "结束=========================="); TestJDom.bookList.add(bookEntity);bookEntity = null;}// System.out.println(TestJDom.bookList.size());} catch (JDOMException | IOException e) {e.printStackTrace();}}public void createXML() {//创建⼀个root节点rssElement rss = new Element("rss");//定义version属性rss.setAttribute("version","2.0");//创建documentDocument document = new Document(rss);Element channel = new Element("channel");rss.addContent(channel);Element title = new Element("title");channel.addContent(title);title.setText("<java你好>");//title.addContent(new CDATA("<!--java你好-->"));Format format = Format.getCompactFormat();format.setIndent("");format.setEncoding("gbk");XMLOutputter outputer = new XMLOutputter(format);try {outputer.output(document, new FileOutputStream("src/TestJDom/JDomnews.xml")); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {TestJDom jd = new TestJDom();jd.parseXML();jd.createXML();}}2、Jdomnews.xml<?xml version="1.0" encoding="gbk"?><rss version="2.0"><channel><title><java你好></title></channel></rss>三、dom4j解析1、解析与创建package youth.hong.TestDom4J;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import youth.hong.TestDom.Book;public class Dom4JTest {private static List<Book> bookList = new ArrayList<Book>();//dom4j解析xml⽂档public void parseXML() {SAXReader reader = new SAXReader();try {Document document = reader.read(new File("src/TestJDom/TestDom.xml"));System.out.println(new File("src/TestJDom/TestDom.xml"));Element bookStore = document.getRootElement();Iterator<Element> it = bookStore.elementIterator();while(it.hasNext()) {System.out.println("===================某本书开始==================");Book bookEntity = new Book();Element book = it.next();List<Attribute> attrList = book.attributes();System.out.println("当前结点下节点的个数(包括空⽩的⽂本节点)" + book.nodeCount());for(Attribute attribute : attrList) {System.out.println("属性名:" + attribute.getName() + "属性值:" + attribute.getValue());if(attribute.getName().equals("id")) {bookEntity.setId(attribute.getValue());}else if(attribute.getName().equals("class")) {bookEntity.setClassName(attribute.getValue());}}Iterator<Element> itt = book.elementIterator();while(itt.hasNext()) {Element childNode = itt.next();System.out.println("节点名:" + childNode.getName() + "节点值:" + childNode.getStringValue());if(childNode.getName().equals("name")) {bookEntity.setName(childNode.getStringValue());}else if(childNode.getName().equals("author")) {bookEntity.setAuthor(childNode.getStringValue());}else if(childNode.getName().equals("year")) {bookEntity.setYear(childNode.getStringValue());}}bookList.add(bookEntity);bookEntity = null;System.out.println("===================某本书结束==================");System.out.println(bookList.size());}} catch (DocumentException e) {e.printStackTrace();}}//⽣成XML⽂档public void createXML() {Document document = DocumentHelper.createDocument();Element rss = document.addElement("rss");rss.addAttribute("version", "2.0");Element channel = rss.addElement("channel");Element title = channel.addElement("title");title.setText("<!--新闻要点-->");Element image = channel.addElement("image");Element imageTitle = image.addElement("title");imageTitle.setText("");Element link = image.addElement("link");link.setText("");Element url = image.addElement("url");url.setText("/img/logo-news.gif");File file = new File("src/TestJDom/news.xml");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK");try {XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);writer.setEscapeText(false);writer.write(document);} catch (UnsupportedEncodingException | FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {Dom4JTest d4j = new Dom4JTest();d4j.parseXML();d4j.createXML();}}2、创建的news.xml<?xml version="1.0" encoding="GBK"?><rss version="2.0"><channel><title><!--新闻要点--></title><image><title></title><link></link><url>/img/logo-news.gif</url></image></channel></rss>四、dom解析1、解析与创建package youth.hong.TestDom;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class TestDom {private static List<Book> bookSuffle = new ArrayList<Book>();/*** 获取DocumentBuilder对象*/public DocumentBuilder getDocumentBuilder() {DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = null;try {documentBuilder = dbf.newDocumentBuilder();} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}return documentBuilder;}/*** dom⽅法解析Xml⽂件*/public void domParse() {try {Document document = getDocumentBuilder().parse("src/TestJDom/TestDom.xml"); NodeList bookList = document.getElementsByTagName("book");for(int i = 0; i < bookList.getLength(); i++) {String id = null;String name = null;String author = null;String year = null;//在不知道属性名称的情况下使⽤/*Node book = bookList.item(i);NamedNodeMap attrs = book.getAttributes();for(int j = 0; j < attrs.getLength(); j++) {Node attr = attrs.item(j);System.out.println(attr.getNodeName() + " " + attr.getNodeValue());}*///在知道属性名称的情况下使⽤/*Element book = (Element)bookList.item(i);String id = book.getAttribute("id");String className = book.getAttribute("class");System.out.println(id + " " + className);*/Node book = bookList.item(i);Element bookElement = (Element)book;id = bookElement.getAttribute("id");NodeList childNodes = book.getChildNodes();System.out.println(childNodes.getLength());for(int k = 0; k < childNodes.getLength(); k++) {Node childNode = childNodes.item(k);if(childNode.getNodeType() == Node.ELEMENT_NODE) {String value = childNode.getTextContent();String nodeName = childNode.getNodeName();switch(nodeName) {case "name" : name = value; value = null; break;case "author" : author = value; value = null; break;case "year" : year = value; value = null; break;}//System.out.println(childNode.getNodeName() + " " + childNode.getFirstChild().getNodeValue()); }}bookSuffle.add(new Book(id,name,author,year));//System.out.println();}for(int i = 0; i < bookSuffle.size(); i++) {System.out.println(bookSuffle.get(i));}} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** ⽣成Xml⽂件,要创建多本书可以通过for循环来⽣成,但内容应当定义⼀个book的类去存储内容* @param args*/public void creatXml() {DocumentBuilder documentBuilder = this.getDocumentBuilder();//⽣成documentDocument document = documentBuilder.newDocument();//去掉standalone属性document.setXmlStandalone(true);//创建bookStore节点Element bookStore = document.createElement("bookStore");//创建book节点Element book1 = document.createElement("book");Element book2 = document.createElement("book");Element name1 = document.createElement("name");Element author1 = document.createElement("author");Element year1 = document.createElement("year");Element price1 = document.createElement("price");Element name2 = document.createElement("name");Element author2 = document.createElement("author");Element year2 = document.createElement("year");Element price2 = document.createElement("price");/*//创建⽂本节点Node nameText = document.createTextNode("七龙珠");//添加⽂本节点name.appendChild(nameText);*/name1.setTextContent("⽝夜叉");year1.setTextContent("2008");author1.setTextContent("⾼桥留美⼦");price1.setTextContent("200$");book1.appendChild(name1);book1.appendChild(author1);book1.appendChild(year1);book1.appendChild(price1);//为book节点添加属性idbook1.setAttribute("id", "1");//把book节点加⼊到bookStore节点中bookStore.appendChild(book1);name2.setTextContent("唐⼈街探案");year2.setTextContent("2016");author2.setTextContent("陈思成");price2.setTextContent("VIP会员免费");book2.appendChild(name2);book2.appendChild(author2);book2.appendChild(year2);book2.appendChild(price2);//添加第⼆个bookbookStore.appendChild(book2);//把节点bookStore加⼊到document中document.appendChild(bookStore);//使⽤TransformerFactoryTransformerFactory factory = TransformerFactory.newInstance();try {Transformer transformer = factory.newTransformer();//输⼊节点之间的换⾏transformer.setOutputProperty(OutputKeys.INDENT, "yes");//传⼊document,输出流⽣成xml⽂件transformer.transform(new DOMSource(document), new StreamResult(new File("bookCreate.xml"))); } catch (TransformerConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TransformerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 主程序的⼊⼝* @param args*/public static void main(String[] args) {// TODO Auto-generated method stubTestDom testDom = new TestDom();testDom.domParse();testDom.creatXml();}}2、⽣成的bookCreate.xml<?xml version="1.0" encoding="UTF-8"?><bookStore><book id="1"><name>⽝夜叉</name><author>⾼桥留美⼦</author><year>2008</year><price>200$</price></book><book><name>唐⼈街探案</name><author>陈思成</author><year>2016</year><price>VIP会员免费</price></book></bookStore>。
java 解析xml方法

java 解析xml方法在Java中,有许多库可以用于解析XML文档。
其中,DOM和SAX 是最常用的两种。
DOM是一种基于树结构的解析方式,而SAX是一种基于事件的解析方式。
1.DOM解析XMLDOM解析器将整个XML文档读入内存,并将其转换为一个树形结构。
这个树形结构可以使用Document Object Model (DOM) API来访问。
DOM解析器可以很容易地遍历这个树形结构,并提取出需要的元素和属性。
下面是一个使用DOM解析器读取XML文件的示例:```javaDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(newFile('example.xml'));Element root = document.getDocumentElement();NodeList nodeList = root.getElementsByTagName('book'); for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);if (node.getNodeType() == Node.ELEMENT_NODE) {Element element = (Element) node;String title =element.getElementsByTagName('title').item(0).getTextConten t();String author =element.getElementsByTagName('author').item(0).getTextConte nt();System.out.println('Title: ' + title + ', Author: ' + author);}}```在这个例子中,我们使用了DocumentBuilderFactory和DocumentBuilder类来创建一个DOM解析器。
jdom解析xml

jdom解析xml这次把代码整理了⼀下,打包发上来了,程序中需要⽤到的jar包也⼀起打在⾥⾯了,有兴趣的朋友可以解压后直接导⼊的eclipse⾥运⾏! xml是⼀种⼴为使⽤的可扩展标记语⾔,java中解析xml的⽅式有很多,最常⽤的像jdom、dom4j、sax等等。
前两天刚好有个程序需要解析xml,就学了下jdom,写了个⼩例⼦,这⾥做个学习笔记。
要使⽤jdom解析xml⽂件,需要下载jdom的包,我使⽤的是jdom-1.1。
解压之后,将lib⽂件夹下的.jar⽂件以及build⽂件夹下的jdom.jar拷贝到⼯程⽂件夹下,然后就可以使⽤jdom操作xml⽂件了。
⼀、读取xml⽂件假设有这样⼀个xml⽂件:Xml代码1. <?xml version="1.0" encoding="UTF-8"?>2. <sys-config>3. <jdbc-info>4. <driver-class-name>oracle.jdbc.driver.OracleDriver</driver-class-name>5. <url>jdbc:oracle:thin:@localhost:1521:database</url>6. <user-name>why</user-name>7. <password>why</password>8. </jdbc-info>9. <provinces-info>10. <province id="hlj" name="⿊龙江">11. <city id="harb">哈尔滨</city>12. <city id="nj">嫩江</city>13. </province>14. <province id="jl" name="吉林"></province>15. </provinces-info>16. </sys-config>⾸先,⽤ org.jdom.input.SAXBuilder 这个类取得要操作的xml⽂件,会返回⼀个 org.jdom.Document 对象,这⾥需要做⼀下异常处理。
java生成和解析xml

java⽣成和解析xml 本⽂主要使⽤的是Jdom.jar包(包的下载百度⼀下)实现了⽣成xml⽂件和解析xml⽂件下⾯是⽣成xml的实现说明:stuLists集合是⼀个存放着Student对象的集合1import java.io.File;2import java.io.FileNotFoundException;3import java.io.FileOutputStream;4import java.io.IOException;5import java.util.ArrayList;67import org.jdom.Document;8import org.jdom.Element;9import org.jdom.input.SAXBuilder;10import org.jdom.output.Format;11import org.jdom.output.XMLOutputter;1213public class AddXml {14public static void main(String[] args) {15new AddXml().changeXml();16 }17public void changeXml(){18 Jdbc jdbc = new Jdbc();19 jdbc.addList();20 ArrayList<Student> stuLists = Jdbc.getStuList();2122 Document docu = new Document();23 Element root = new Element("root");24 docu.addContent(root);25for (int i = 0; i < stuLists.size(); i++) {26// System.out.println(stuLists.get(i));27 Student s = stuLists.get(i);2829 Element info = new Element("info");30 Element student = new Element("student");31 Element id = new Element("id");32 Element name = new Element("name");33 Element sex = new Element("sex");34 Element age = new Element("age");3536 Element book = new Element("book");37 Element bid = new Element("bid");38 Element bname = new Element("bname");39 Element bprice = new Element("bprice");40 Element bautor = new Element("bautor");41 book.addContent(bid);42 book.addContent(bname);43 book.addContent(bprice);44 book.addContent(bautor);4546 student.addContent(id);47 student.addContent(name);48 student.addContent(sex);49 student.addContent(age);50 info.addContent(student);51 info.addContent(book);5253 root.addContent(info);54int a = i+1;55 String No = "000"+a;56 student.setAttribute("No", No);57 id.setText(s.getId());58 name.setText(s.getName());59 sex.setText(s.getSex());60 age.setText(s.getAge());6162 String b="0"+a;63 bid.setText(b);64 bname.setText("java核⼼");65 bprice.setText("1334.0");66 bautor.setText("star");6768 }69//格式化⽣成的xml⽂件,如果不进⾏格式化的话,⽣成的xml⽂件将会是很长的⼀⾏...70 Format format = Format.getCompactFormat();71 format.setEncoding("utf-8");72 format.setIndent(" ");73 XMLOutputter xo = new XMLOutputter(format);74try {75 xo.output(docu, new FileOutputStream(new File("e:/io/stu.xml")));76 } catch (FileNotFoundException e) {77// TODO Auto-generated catch block78 e.printStackTrace();79 } catch (IOException e) {80// TODO Auto-generated catch block81 e.printStackTrace();82 }83 System.out.println("⽣成xml⽂件成功!!!");84 }85 }结果如图所⽰:下⾯是⽤java解析上⾯所写的xml⽂件简写版package com.direct.demo;import java.io.IOException;import java.util.List;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;public class Saxxml {public static void main(String[] args) {//解析xml⽂档SAXBuilder builder = new SAXBuilder();Document docu = null;try {docu = builder.build("e:/io/student.xml");} catch (JDOMException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Element root = docu.getRootElement();//得到根⽬录List stulist = root.getChildren();System.out.println(stulist.size()+"-----------");System.out.println("------------------读取xml⽂档的信息---------------------"); for (int i = 0; i < stulist.size(); i++) {Element e = (Element) stulist.get(i);String stuid;String stuname ;String stusex ;String stuage;/*String stuValues = e.getAttribute("No").getValue();//属性值 String stuValues1 = e.getAttributeValue("No");if (stuValues.equals("102")) {//修改姓名System.out.println(stuValues);e.getChild("stuname").setText("砖⽯王⽼五");//删除元素root.removeContent(e);break;}*/if (i==0) {stuid = e.getChildText("stuid");stuname = e.getChildText("stuname");stusex = e.getChildText("stusex");stuage = e.getChildText("stuage");}else {stuid = e.getChildText("stuid"+i);stuname = e.getChildText("stuname"+i);stusex = e.getChildText("stusex"+i);stuage = e.getChildText("stuage"+i);}System.out.println("属性:"+e.getAttributeValue("No"));System.out.println("学号:"+stuid);System.out.println("姓名:"+stuname);System.out.println("年龄:"+stuage);System.out.println("性别:"+stusex);System.out.println("--------------------");}}}。