XML解析,dom解析,Jdom解析
XML是一门标记语言,主要作用是用来进行数据传输和配置保存的。XML文件内容主要由两部分组成:头信息,主体信息 头信息: 主体信息里主要放入具体要说明的数据。 主体信息的组成: a) 元素节点(Element),标签,只有name b) 属性节点(Attribute),必须依附于元素节点存在,name和value同时存在 c) 文本节点(Text),具体的数据内容。只有value 2) 在这些节点之间存在关系:父子关系 a) 一个节点最多只能有一个父节点 b) 如果一个节点没有父节点,那么该节点称为根节点(Root) c) 一个XML中只允许存在一个根节点 d) 只有元素节点可以有子节点,文本节点没有子节点,因此文本节点也称为叶子节点(Leaf) 如果想通过程序创建或读取XML文件,一般都使用一些解析工具完成,常用的解析方式有三种: 1) DOM解析:由w3c官方提供,所有语言都支持这种解析,解析方式是将整个文件读取到内存里,形成树型结构进行解析,代码清晰,但如果XML文件过大,会对内存造成压力。 DOM解析一般使用的Java语言,主要是用来完成XML的创建工作,通过查询到的数据库数据,建立一个XML文件,将文件传递给JavaScript。 public static void createXML(String savePath) throws Exception { List<City> allCities = new ArrayList<City>(); City c = new City(); c.setId(1); c.setTitle("南通"); allCities.add(c); c = new City(); c.setId(2); c.setTitle("南京"); allCities.add(c); c = new City(); c.setId(3); c.setTitle("杭州"); allCities.add(c); // 建立Document核心操作对象 Document document = new Document(); // 建立根节点 Element root = new Element("allCity"); // 循环 Iterator<City> iter = allCities.iterator(); while (iter.hasNext()) { c = iter.next(); // 建立所有元素节点 Element cityElement = new Element("city"); Element idElement = new Element("id"); Element titleElement = new Element("title"); // 配置关系 idElement.addContent(c.getId().toString()); titleElement.addContent(c.getTitle()); cityElement.addContent(idElement); cityElement.addContent(titleElement); root.addContent(cityElement); } // 设置根节点 document.setRootElement(root); // 导出 XMLOutputter outputer = new XMLOutputter(); // 设置编码 outputer.setEncoding("UTF-8"); outputer.output(document,new FileWriter(new File(savePath))); } public static void main(String[] args) throws Exception { createXML("D:/jdom.xml"); }
3) 第三方提供的解析工具:结合SAX和DOM的优点,并将代码风格改为Java的风格,简化开发。典型的第三方解析工具是:JDOM,dom4j public static void createXML(String savePath) throws Exception { // 这里准备一个假的List集合,保存着所有数据库中查询到的数据 List<City> allCities = new ArrayList<City>(); City c = new City(); c.setId(1); c.setTitle("南通"); allCities.add(c); c = new City(); c.setId(2); c.setTitle("南京"); allCities.add(c); c = new City(); c.setId(3); c.setTitle("杭州"); allCities.add(c); // 开始进行创建,也需要核心对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); // 通过document可以建立各种类型的节点。 // 先建立根节点 Element root = document.createElement("allCity"); // 里面循环建立多个元素节点 Iterator<City> iter = allCities.iterator(); while (iter.hasNext()) { c = iter.next(); // 元素节点 Element cityElement = document.createElement("city"); Element idElement = document.createElement("id"); Element titleElement = document.createElement("title"); // 建立文本节点 Text idText = document.createTextNode(c.getId().toString()); Text titleText = document.createTextNode(c.getTitle()); // 设置各个节点间的关系 idElement.appendChild(idText); titleElement.appendChild(titleText); cityElement.appendChild(idElement); cityElement.appendChild(titleElement); root.appendChild(cityElement); } // 将root设置为根节点 document.appendChild(root); // 还要完成输出操作,需要通过其他的类来完成 TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); // 建立要导出的源对象 Source s = new DOMSource(document); // 导出的位置 StreamResult result = new StreamResult(new File(savePath)); // 可以手工设置编码,默认使用当前项目的UTF-8编码 t.setOutputProperty("encoding","UTF-8"); // 进行导出 t.transform(s,result); } public static void main(String[] args) throws Exception { // parseMappingXML("D:/News.hbm.xml"); // parseWebXML("D:/web.xml"); createXML("D:/dom.xml"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |