XML解析

来源:互联网 发布:nginx 地址重定向 www 编辑:程序博客网 时间:2024/03/29 19:03

//1 .2 的代码来自MLDN   算是我的学习笔记吧

1.dom 解析 xml 

package org.lxh.xml.dom;import java.io.File;import java.io.IOException;import javax.xml.parsers.*;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;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.NodeList;import org.xml.sax.SAXException;public class DomDemo {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {//1.解析简单的XX/*//取得DocumentBuilderFactory类的对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//取得DocumentBuilder类的对象 DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse(new File("F:\\ws1" + File.separator + "xml_demo_02.xml"));NodeList n1 = doc.getElementsByTagName("name");System.out.println("姓名: " + n1.item(0).getFirstChild().getNodeValue());*///2.解析复杂的XXX/* * //取得DocumentBuilderFactory类的对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//取得DocumentBuilder类的对象 DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse(new File("F:\\ws1" + File.separator + "xml_demo_01.xml"));//得到所有linkman节点NodeList n1 = doc.getElementsByTagName("linkman");for(int x = 0; x < n1.getLength(); x ++){Element e = (Element)n1.item(x);System.out.println("姓名: "  + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());System.out.println("电话: "  + e.getElementsByTagName("tel").item(0).getFirstChild().getNodeValue());}*///3创建 文档//取得DocumentBuilderFactory类的对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//取得DocumentBuilder类的对象 DocumentBuilder builder = factory.newDocumentBuilder();//创建一个新的XML文档Document doc = builder.newDocument();Element addresslist = doc.createElement("addresslist");Element linkman = doc.createElement("linkman");Element name = doc.createElement("name");Element email = doc.createElement("email");//设置节点内容name.appendChild(doc.createTextNode("wucy")); email.appendChild(doc.createTextNode("wzlwcy@163.com"));// 设置节点关系linkman.appendChild(name);linkman.appendChild(email);addresslist.appendChild(linkman);doc.appendChild(addresslist);NodeList n1 = doc.getElementsByTagName("linkman");for(int x = 0; x < n1.getLength(); x ++){Element e = (Element)n1.item(x);System.out.println("姓名: "  + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());System.out.println("邮件: "  + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());}//输出到文本中TransformerFactory tf = TransformerFactory.newInstance();Transformer t = tf.newTransformer();t.setOutputProperty(OutputKeys.ENCODING,"UTF-8");//DOMSource source = new DOMSource(doc);StreamResult result = new StreamResult(new File("F:\\WS1" + File.separator + "output.xml"));t.transform(source, result);}}

2.sax

package org.lxh.xml.sax;import java.io.File;import java.util.jar.Attributes;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SaXdEMO extends DefaultHandler{public void startDocument() throws SAXException {System.out.println("<?xml version=\"1.0\" encoding=\"GBK\">");}public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {System.out.print("<");System.out.print(qName);System.out.print(">");}public void characters(char[] ch, int offset, int length)throws SAXException {System.out.println("节点数据:" + new String(ch, offset, length));}public void endDocument() throws SAXException {System.out.println("文档结束...");}public static void main(String[] args) {try {// 建立解析工程SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();parser.parse(new File("F:\\ws1", File.separator+ "xml_demo_01.xml"), new SaXdEMO());} catch (Exception e) {e.printStackTrace();}}}

3

使用JDOM解析XML(转载,简单又详细)

一、前言
    JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。

    DOM适合于当今流行的各种语言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了为HTML和XML文档提供了一个可应用于不同平台的编程接口。W3C DOM的最新信息可从http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查阅。微软在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconxmldomuserguide.asp上也有DOM的详细技术信息。

   DOM的设计为了适用于不同的语言,它保留了不同语言中非常相似的API。但是它并不适合于Java编程者的习惯。而JDOM作为一种轻量级API被制定,它最核心的要求是以Java为中心,只适合于Java语言,它遵循DOM的接口主要规则,除去了DOM中为了兼容各语言而与Java习惯的不同。

二、使用JDOM的前提条件
   须要有SAX、DOM解析器的类文件,JDOM只是一种适合Java程序员来使用的Java XML解析器,目前流行的Java XML解析器还有:Apache Xerces Java、JAXP。
Xerces Java解析器是完全用Java编写的XML解析器,最新版本是2.5,它支持以下标准和API:
(1) XML1.0规范(第二版本)
(2) XML命名空间规范
(3) DOM2核心标准规范
(4) SAX2核心扩展
(5) JAXP1.2 :是Sun提供的使用Java处理XML的接口API。
(6) XML Schema结构和数据类型标准

      还有最好的是它开放源代码,我们可以在http://xml.apache.org/dist/xerces-j/ 处去下载。下载文件Xerces-J-bin.2.5.0.zip。
解压下载文件,得到四个压缩包加到项目的路径中(其实不要全加,但不熟的情况下考虑这么做)。
JDOM的二进制版本下载:http://www.jdom.org/downloads/index.html
把解压后的jdom.jar文件加到项目的类路径中,另外便于调试,还要下载它的源代码。

三、使用JDOM解析XML
     好了,现在该是正题了。下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档。
为了简单,我用了如下XML作为要解析的XML文件:
<?xml version="1.0" encoding="gb2312"?>
<books>
   <book email="zhoujunhui">
     <name>rjzjh</name>
     <price>60.0</price>
  </book>
</books>
够简单的吧,但它对于我们关心的东西都有了,子节点,属性。
下面是用于解析这个XML文件的Java文件:

1 public class JDomParse {2public JDomParse(){3String xmlpath="library.xml";4SAXBuilder builder=new SAXBuilder(false);5try {6Document doc=builder.build(xmlpath);7Element books=doc.getRootElement();8List booklist=books.getChildren("book");9for (Iterator iter = booklist.iterator(); iter.hasNext();) {10Element book = (Element) iter.next();11String email=book.getAttributeValue("email");12System.out.println(email);13String name=book.getChildTextTrim("name");14System.out.println(name);15book.getChild("name").setText("alterrjzjh");1617}1819XMLOutputter outputter=new XMLOutputter();20outputter.output(doc,new FileOutputStream(xmlpath));2122} catch (JDOMException e) {23e.printStackTrace();24} catch (IOException e) {25e.printStackTrace();26}27}28public static void main(String[] args) {29new JDomParse();30}31}
不到30行代码,现在我对代码解释一下:
四、解释代码
引用的类:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
(1)使用JDOM首先要指定使用什么解析器。如:
        SAXBuilder builder=new SAXBuilder(false); 这表示使用的是默认的解析器
(2)得到Document,我们以后要进行的所有操作都是对这个Document操作的:
        Document doc=builder.build(xmlpath);
(3)得到根元素:
        Element books=doc.getRootElement();
在JDOM中所有的节点(DOM中的概念)都是一个org.jdom.Element类,当然他的子节点也是一个org.jdom.Element类。
(4)得到元素(节点)的集合:
      List booklist=books.getChildren("book");
这表示得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
(5)轮循List集合
     for (Iterator iter = booklist.iterator(); iter.hasNext();) {
       Element book = (Element) iter.next();
    }
还有一种轮循方法是:
    for(int i=0;I<booklist.size();I++){
      Element book=(Element)booklist.get(i);
    }
(6)取得元素的属性:
    String email=book.getAttributeValue("email");
   取得元素book的属性名为“email”的属性值。
(7)取得元素的子元素(为最低层元素)的值:
    String name=book.getChildTextTrim("name");
    注意的是,必须确定book元素的名为“name”的子元素只有一个。
(8)改变元素(为最低层元素)的值:
    book.getChild("name").setText("alterrjzjh");
    这只是对Document的修改,并没有在实际的XML文档中进行修改
(9)保存Document的修改到XML文件中:
   XMLOutputter outputter=new XMLOutputter();
    outputter.output(doc,new FileOutputStream(xmlpath));

我们先要有一个XMLOutputter类,再把已经修改了的Document保存进XML文档中。
到此。用JDOM解析和处理XML文档讲解完了,麻雀虽小,五脏俱全。现在已对JDOM有个整体上的概念了吧

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 银行卡被存款机吞了怎么办 去银行卡存款机器故障怎么办 银行卡存款没有存进去怎么办 被黑网站黑钱了怎么办 饿了吗账户异常怎么办 单位里有人整你怎么办 乌鲁木齐信息采集结束后怎么办 头发很长时间不长怎么办啊 打嘟噜时间不长怎么办 阴茎勃起的时间不长怎么办 睡觉的时间不长怎么办 每次锻炼时间不长怎么办 微信好友不知道是谁怎么办 就一个软件闪退怎么办 葫芦侠修改闪退怎么办 戴尔游匣磁盘占用100怎么办 步步高家教机扫描笔不亮怎么办 社保卡手机号换了怎么办 香港公司进出口没有申报怎么办 智能电视右上角网络未连接怎么办 电子秤按键板不好用怎么办失灵 桑塔纳车钥匙锁车里了怎么办 舌头上有锯齿印怎么办 夏天有脚气脚臭怎么办 xp分辨率太高黑屏怎么办 农村淘宝标识类目没了怎么办 被投诉到食品监督局怎么办 被客户315投诉了怎么办 给人打不接受调解怎么办 失业证年审忘了怎么办 工商年检过期4天怎么办 个体营业执照年审过期了怎么办 企业年报密码忘了怎么办 税务年报报错了怎么办 工商证过期5年怎么办 车年检标志丢了怎么办 年检标志打错了怎么办 贵州个体出租车工商执照年检怎么办 驾驶证考试预约提示网络繁忙怎么办 帝豪显示屏花屏怎么办 注册公司居委会不盖章怎么办