java读取XML的四种方法
来源:互联网 发布:尼龙网眼布淘宝 编辑:程序博客网 时间:2024/05/19 20:59
首先理解XML的含义:
W3CSchool的解释是:
XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 XML 是 W3C 的推荐标准
具体可参阅w3shcool官方网站文档http://w3school.com.cn/index.html
具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。
以以下的xml文件为例:
<?xml version="1.0" encoding="UTF-8"?><bookstore> <book id="1" name="徐杰"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> </book> <book id="2"> <name>安徒生童话</name> <year>2004</year> <price>77</price> <language>English</language> </book></bookstore>
DOM方法:
准备工作:
创建一个documentBuilder工厂类,用domumentBuilder类获得:
DocumentBuilder db=dbf.newDocumentBuilder();
创建一个document对象并用parse方法加载books.xml
Document document=db.parse("books.xml");
现在可以开始写具体的代码了:
//用NodeList获取books的属性名称NodeList bookList=document.getElementsByTagName("book");//输出book的属性数字System.out.println("book的总共属性个数是:"+bookList.getLength()); for(int i=0;i<bookList.getLength();i++){System.out.println("===========开始第"+(i+1)+"次循环============"); //当不知道xml中属性的个数与属性的名字时用该方法Node book=bookList.item(i);NamedNodeMap arrs=book.getAttributes();System.out.println("第"+(i+1)+"本书共有 "+arrs.getLength()+"个属性值"); for(int j=0;j<arrs.getLength();j++){ Node arr=arrs.item(j); System.out.print("属性名:"+arr.getNodeName()); System.out.println("--属性值:"+arr.getNodeValue()); }//方法前提:已经知道book节点有且只有一个属性值 Element book=(Element) bookList.item(i);//强制类型转换时因为 element有个getAttribute方法 String attrValue=book.getAttribute("id"); System.out.println("id属性值为"+attrValue); NodeList childNodes=book.getChildNodes(); System.out.println("第"+(i+1)+"本书一共有"+childNodes.getLength()+"个子节点"); for(int k=0;k<childNodes.getLength();k++){ if(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){ System.out.print("第"+(k+1)+"个节点名:"+childNodes.item(k).getNodeName()+"---");//第一种方法 //System.out.println(childNodes.item(k).getFirstChild().getNodeValue());//第二种方法 System.out.println(childNodes.item(k).getTextContent()) }
SAX方法:
准备工作:
创建一个SAXParserHandler工厂类
SAXParserFactory factory=SAXParserFactory.newInstance();
2.//创建一个SAXParserHandler对象并用parse加载books.xml
SAXParserHandler handler=new SAXParserHandler();
parser.parse(“books.xml”, handler);
现在可以开始写具体的代码了:
与DOM方法不一样的是:SAX采取的是事件模型机制处理文件,其主函数的SAXSAXParserHandler对象要**申明并继承**DefaultHandler接口
int bookindex=0; String value=null; book books=null; private ArrayList<book> bookList=new ArrayList<book>(); public ArrayList<book> getBookList() { return bookList; } /* * 用来标志解析开始 * */ public void startDocument() throws SAXException { // TODO 自动生成的方法存根 super.startDocument(); System.out.println("SAX解析开始"); } /* * 用来遍历xml文件的开始标签 * */ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO 自动生成的方法存根 super.startElement(uri, localName, qName, attributes); if(qName.equals("book")){ books=new book(); bookindex++; System.out.println("======第"+bookindex+"本书开始循环遍历==========="); //如果已知book的属性值名称和个数时 /*String value=attributes.getValue("id"); System.out.println(value); */ //如果不知book的属性值和个数时 int num=attributes.getLength(); for(int i=0;i<num;i++){ System.out.print("第"+(i+1)+"个属性名称是:"+attributes.getQName(i)+"---"); System.out.println("第"+(i+1)+"个属性值是:" +attributes.getValue(i)); //System.out.println("第"+(i+1)+"个属性值是:" +attributes.getValue(attributes.getQName(i))); if(attributes.getQName(i).equals("id")){ books.setId(attributes.getValue(i)); } } } else if(!qName.equals("book") && !qName.equals("bookstore")){ System.out.print("节点名:"+qName); }} /* * 用来遍历xml文件的结束标签 * */ public void endElement(String uri, String localName, String qName) throws SAXException { // TODO 自动生成的方法存根 super.endElement(uri, localName, qName); if(qName.equals("book")){ bookList.add(books); books=null; System.out.println("======第"+bookindex+"本书结束循环遍历=========="); } else if(qName.equals("name")){ books.setName(value); }else if(qName.equals("author")){ books.setAuthor(value); }else if(qName.equals("name")){ books.setYear("year"); }else if(qName.equals("name")){ books.setYear(value); }else if(qName.equals("price")){ books.setPrice(value); }else if(qName.equals("language")){ books.setLanguage(value); } } //获取字符集内容 public void characters(char[] ch, int start, int length) throws SAXException { // TODO 自动生成的方法存根 super.characters(ch, start, length); value=new String(ch, start, length); if(!value.trim().equals("")){ System.out.println("--"+value); } } /* * 用来标志解析结束 * */ public void endDocument() throws SAXException { // TODO 自动生成的方法存根 super.endDocument(); System.out.println("SAX解析结束"); }
JDOM方法:需要用额外的JDOM包
public class JDOMTest { private static ArrayList<book> bookList=new ArrayList<book>(); public static void main(String[] args) { // 创建一个Saxbuilder对象 SAXBuilder saxbuilder=new SAXBuilder(); InputStream in; try { //创建一个输入流,将xml文件加载到输入流中 in=new FileInputStream("src/res/books.xml"); //通过saxbuilder中的build方法将输入流加载到saxbuilderz中 Document document=saxbuilder.build(in); //通过document对象获取xml文件的根节点 Element rootElment= document.getRootElement(); List<Element> bookList=rootElment.getChildren(); for (Element element : bookList) { book bookEntity=new book(); System.out.println("开始遍历"+(bookList.indexOf(element)+1)+"本书"); List<Attribute> attribute= element.getAttributes(); //知道books.xml的属性名称是用getAttributeValue //element.getAttributeValue("id"); //获取属性 for (Attribute attribute2 : attribute) { String attrname=attribute2.getName(); String attrvalue=attribute2.getValue(); System.out.println("属性名:"+attrname+"--属性值:"+attrvalue); if(attrname.equals("id")){ bookEntity.setId(attrvalue); } } //获取节点值 List<Element> bookchild=element.getChildren(); for (Element element2 : bookchild) { 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()); }else if(element2.getName().equals("price")){ bookEntity.setPrice(element2.getValue()); }else if(element2.getName().equals("language")){ bookEntity.setLanguage(element2.getValue()); } } System.out.println("结束遍历"+(bookList.indexOf(element)+1)+"本书"); JDOMTest.bookList.add(bookEntity); bookEntity=null;// System.out.println(JDOMTest.bookList.size());// System.out.println(JDOMTest.bookList.get(0).getName());// System.out.println(JDOMTest.bookList.get(0).getAuthor()); for(int i=0;i<JDOMTest.bookList.size();i++){ System.out.println(JDOMTest.bookList.get(i).getName()); } } } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }catch (JDOMException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
DOM4J方法:需要额外的DOM4J包
public static void main(String[] args) { DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); try { //创建document工厂 DocumentBuilder db=dbf.newDocumentBuilder(); //创建一个documentbuilder类 Document document=db.parse("books.xml"); //获取属性值 NodeList bookList=document.getElementsByTagName("book"); //输出book的属性数字 System.out.println("book的总共属性个数是:"+bookList.getLength()); for(int i=0;i<bookList.getLength();i++){ System.out.println("===========开始第"+(i+1)+"次循环============"); //当不知道xml中属性的个数与属性的名字时用该方法 Node book=bookList.item(i); NamedNodeMap arrs=book.getAttributes(); System.out.println("第"+(i+1)+"本书共有 "+arrs.getLength()+"个属性值"); for(int j=0;j<arrs.getLength();j++){ Node arr=arrs.item(j); System.out.print("属性名:"+arr.getNodeName()); System.out.println("--属性值:"+arr.getNodeValue()); } //方法前提:已经知道book节点有且只有一个属性值// Element book=(Element) bookList.item(i);//强制类型转换时因为element有个getAttribute方法// String attrValue=book.getAttribute("id");// System.out.println("id属性值为"+attrValue);// NodeList childNodes=book.getChildNodes(); System.out.println("第"+(i+1)+"本书一共有"+childNodes.getLength()+"个子节点"); for(int k=0;k<childNodes.getLength();k++){ if(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){ System.out.print("第"+(k+1)+"个节点名:"+childNodes.item(k).getNodeName()+"---"); //第一种方法 //System.out.println(childNodes.item(k).getFirstChild().getNodeValue()); //第二种方法 System.out.println(childNodes.item(k).getTextContent()); } } System.out.println("===========结束第"+(i+1)+"次循环============"); System.out.println(); } } catch (ParserConfigurationException e) { e.printStackTrace(); }catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
0 0
- java读取xml的四种方法
- java读取XML的四种方法
- java读取xml文件的四种方法
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法
- java读取xml文件的四种方法
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法(转)
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法
- java读取xml文件的四种方法
- Java读取xml文件的四种方法
- Java读取xml文件的四种方法
- java读取xml文件的四种方法
- java读取xml文件的四种方法
- TCP/IP协议中backlog分析与设置以及TCP状态变化
- PHPstorm相关设置以及快捷键
- IMS Modify Call (3) accept reject timeout 接受/拒接/超时 视频升级请求
- mybatis多表进行连接查询(left join)
- lower_bound 和 upper_bound
- java读取XML的四种方法
- python中字符串str的strip()方法
- iWebOffice使用VBA控制字体
- cocos2d-android - 1.地图动态加载原理(世界地图的实现)
- 初探
- mysql之TIMESTAMP(时间戳)用法详解
- Android Studio Gradle 插件开发
- Glide 框架的使用-1
- Android Binder通信机制浅析