Book.xml
<?xml version="1.0" encoding="UTF-8"?> <books> <book isbn="33322"> <name>《水浒传》</name> <price>58</price> <author>施耐庵</author> <year>元末</year> </book> <book isbn="33323"> <name>《西游记》</name> <price>58</price> <author>吴承恩</author> <year>明代</year> </book> </books>
DOM方式解析XML:
package com.mmsiles.xml; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class TestDOM { public static void main(String[] args) { long start = System.currentTimeMillis(); try { // 实例化doc工厂 DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); // 实例化Doc构造器 DocumentBuilder builder = factory.newDocumentBuilder(); File file = new File("src/xml/Book.xml"); // 解析XML文件 Document doc = builder.parse(file); // 获取根元素 Element root = doc.getDocumentElement(); // 获取节点列表 NodeList books = root.getChildNodes(); // 循环节点列表 for (int i = 0; i < books.getLength(); i++) { // 获取某个节点 Node book = books.item(i); if (book.getNodeType() == Node.ELEMENT_NODE) { // 获取节点属性值 String isbn=book.getAttributes().getNamedItem("isbn").getNodeValue(); System.out.print("isbn :"+isbn+"\t"); //循环子节点 for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){ if(node.getNodeType()==Node.ELEMENT_NODE){ if(node.getNodeName().equals("name")){ String name=node.getFirstChild().getNodeValue(); System.out.print("名称:"+name+"\t"); } if(node.getNodeName().equals("price")){ String price=node.getFirstChild().getNodeValue(); System.out.print("价格:"+price+"\t"); } if(node.getNodeName().equals("author")){ String author=node.getFirstChild().getNodeValue(); System.out.print("作者:"+author+"\t"); } if(node.getNodeName().equals("year")){ String year=node.getFirstChild().getNodeValue(); System.out.print("年份:"+year+"\n"); } } } } // System.out.println("\n"); } } catch (Exception e) { e.printStackTrace(); } } }
SAX方式解析XML:该种方式解析时,如果xml文档被格式化,可能存在不可见空格导致打印输出排版问题
package com.mmsiles.xml; import java.io.File; import java.util.Stack; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; public class TestSAX extends DefaultHandler { Stack<String> tags = new Stack<String>(); public TestSAX() { super(); } // 接收元素中字符数据的通知 public void characters(char ch[], int start, int length) { String tag = tags.peek(); if (tag.equals("name")) { System.out.print("\t" + new String(ch, start, length)); } if (tag.equals("price")) { System.out.print("\t" + new String(ch, start, length)); } if (tag.equals("author")) { System.out.print("\t" + new String(ch, start, length)); } if (tag.equals("year")) { System.out.print("\t" + new String(ch, start, length)); } } // 接受文档开始的通知 public void startElement(String uri, String localName, String qName, Attributes attrs) { if (qName.equals("book")) { System.out.print(attrs.getValue("isbn")); } tags.push(qName); } public static void main(String[] args) { long start = System.currentTimeMillis(); try { //取得SAX工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //取得SAX解析器 SAXParser parser=factory.newSAXParser(); //解析XML文件 File file=new File("src/xml/Book.xml"); TestSAX sax=new TestSAX(); parser.parse(file, sax); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } long end=System.currentTimeMillis(); System.out.println(end-start); } }
JDOM方式解析XML:需要JDOM的jar包支持。http://www.jdom.org
DOM4J方式解析XML:需要DOM4J的jar包支持。http://dom4j.org
package com.mmsiles.xml; import java.io.File; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class TestDOM4J { public static void main(String[] args) { long start = System.currentTimeMillis(); try { // 得到SAX解析器 SAXReader reader = new SAXReader(); // 解析XML文件 File file = new File("src/xml/Book.xml"); Document doc = reader.read(file); // 取得根节点 Element root = doc.getRootElement(); // 取得节点列表 for (Iterator it = root.elementIterator(); it.hasNext();) { // 取得某一个子节点 Element book = (Element) it.next(); // 取得节点属性 String isbn = book.attributeValue("isbn"); System.out.print(isbn+"\t"); for (int i = 1; i < book.nodeCount(); i++) { String str = book.node(i).getText(); // // 取得名称 // String name = book.node(1).getText(); // // 取得价格 // String price = book.node(2).getText(); // // 取得作者 // String author = book.node(3).getText(); // // 取得年份 // String year = book.node(4).getText(); // 打印 // System.out.print("\t" + name); // System.out.print("\t" + price); // System.out.print("\t" + author); // System.out.print("\t" + year+"\n"); if(str.contains("\t")){ continue; } System.out.print( str+ "\t\t"); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } long end = System.currentTimeMillis(); // System.out.println(end-start); } }
相关推荐
标题中的“PB 解析XML”指的是使用PowerBuilder(简称PB)这一编程工具处理XML数据的过程。PowerBuilder是一款广泛用于开发企业级应用的可视化编程环境,它支持多种数据格式,包括XML。XML(eXtensible Markup ...
本文将深入探讨如何使用C++来解析XML文件,主要围绕“C++实现对xml文件的解析”这一主题展开。 XML文件通常包含一系列元素,每个元素都有开始标签、结束标签和可能的属性。C++中解析XML文件的方法多种多样,这里...
解析XML是将XML文档转换为程序可以理解的数据结构的关键步骤。本文将深入探讨XML解析的基本概念、常用方法以及相关的Java库——JDOM。 XML文档由一系列元素构成,每个元素都包含标签、属性和内容。解析XML的过程...
本实例将详细探讨如何在Delphi 7中解析XML文件。 首先,我们需要引入必要的单元,如`Classes`和`XMLDoc`,它们包含了处理XML的基本类。`Classes`单元提供了基础的TStringList等类型,而`XMLDoc`单元则包含了...
在C++中,解析XML文档或XML字符串是常见的任务,特别是在需要与JavaScript或其他不支持指针的语言交互时。本文将详细介绍如何在Visual Studio 2010环境下利用Microsoft的MSXML库来处理XML数据。 首先,让我们看看...
在“PB解析xml格式串”的主题中,我们主要关注如何将XML格式的数据转换为Protocol Buffers的二进制格式,以便于高效地存储和传输。以下是一些相关的知识点: 1. **Protocol Buffers介绍**:PB是一种高效的序列化...
在本文中,我们将深入探讨如何在STM32F107上使用minixml库解析XML(可扩展标记语言)文档,这对于那些初次尝试在嵌入式环境中处理XML数据的开发者来说,是非常有价值的。 XML是一种通用的数据交换格式,它允许结构...
在本项目"STM32解析XML完整工程.zip"中,重点是实现STM32利用软件资源处理XML(eXtensible Markup Language)文件。XML是一种用于标记数据的标准格式,常用于存储和传输结构化数据,例如配置文件、设备通信协议等。 ...
标题中的“PB解析XML字符串 把XML 变为数据窗口”指的是使用PowerBuilder(PB)这一编程工具,处理XML格式的数据,并将其转换成数据窗口对象的过程。数据窗口是PowerBuilder中的一个核心组件,用于显示、编辑和管理...
在标题“domino通过lotusscript解析xml”中,我们关注的重点是使用Lotusscript来解析XML文件。解析XML意味着读取其结构并从中提取所需的信息。在Lotusscript中,我们可以使用内置的XML处理对象,如`XMLDocument`,来...
在本文中,我们将深入探讨如何使用C#编程语言解析XML文件,并将其内容在Windows Forms(WinForm)应用程序中展示。XML(eXtensible Markup Language)是一种数据存储和交换的标准格式,而C#是Microsoft .NET框架下...
本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
使用JAXB解析XML时,我们首先需要创建一个Java类模型,这个模型反映了XML文档的结构。每个XML元素对应一个Java类,类的属性对应元素的属性或子元素。例如,如果XML中有以下结构: ```xml <text>Some text here ...
Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...
本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...
有两种主要方法来解析XML中的特殊字符: **方法一:使用实体引用** 实体引用是XML中最常见的处理特殊字符的方式。当你需要在XML文档中插入特殊字符时,可以使用对应的实体引用。比如,如果你想在文本中包含一个...
4. **解析XML**:使用ezxml库的核心函数`ezxml_parse()`解析XML文件。这个函数会返回一个ezxml_t类型的根节点,代表整个XML文档。然后,可以使用`child()`, `tag()`, `attr()`, `text()`等方法来遍历和访问XML树。 ...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
JS 解析 XML 文件 作为一名 IT 行业大师,我将从给定的文件中生成相关知识点,涵盖 JS 解析 XML 文件的各种方面。 JS 解析 XML 文件的必要性 在当前的 web 开发中,XML 文件广泛应用于数据交换和存储。因此,如何...