两种解析方式:
DOM(Document Object Model 文档对象模型)
关键字:树(Document)
优点: 把 xml 文件在内存中构造树形结构,可以遍历和修改节点
缺点: 如果文件比较大,内存有压力,解析的时间会比较长
SAX(Simple API for Xml 基于 XML 的简单 API)
关键字:流(Stream)
把 xml 文件作为输入流,触发标记开始,内容开始,标记结束等动作
优点: 解析可以立即开始,速度快,没有内存压力
缺点: 丌能对节点做修改
3) JDOM / DOM4J :目前市场上常用的 2 种解析 XML 文件的 API
dom4j-1.6.1.jar 结合了 DOM 和 SAX 两种解析方式的优点
准备:导入dom4j-1.6.1.jar 包
读取XML文件(按照文件的格式读取内容):--------------------------------------
public Static void readBook(String filename){
SAXReader reader =new SAXReader(); //解析器
File file=new File(filename); //指定xml文件
try{
Document doc =reader.read(file); //开始解析,建立树形结构并返回
Element rootElmt=doc.getRootElement(); //获得根元素:书籍列表
List list= rootElmt.elements("武侠小说"); //获得所有武侠小说的元素集合
parseNovel(list);
List list2= rootElmt.elements("computer_book"); //获得所有computer_book的元素集合
parseNovel(list2);
}catch(DocumentException e){
e.printStackTrace();
}
}
public Static void parseNovel(List list){
Iterator it =list.iterator();
while(it.hasNext()){
Element novelElmt =(Element)it.next(); ----取出元素
String bookname=novelElmt.elementText("书名"); ---读取元素的内容
String editor=novelElmt.elementText("作者");
String price=novelElmt.elementText("价格");
...
//取出元素的所有属性
List attrList= novelElmt.attributes();==Iterator attrList =novelElmt.attributeIterator();
Iterator attrIt =attrList.iterator();
while(attrIt.hasNext()){
Attribute attr = (Attribute)attrIt.next();
System.out.println(attr.getName() + "=" + attr.getValue());
}
}
}
写XML文件:-------------------------------------------------------------
常用 API 方法:
1) 给元素增加子元素: elmt.addElement( "标记名称" ) ;
2) 给元素增加属性: elmt.addAttribute( "属性名" , "属性值" ) ;
3) 给叶子元素设值: elmt.setText( "元素值" ) ;
/***************************内存中构建document文档对象***********************************/
创建一个如图的xml文件:
filename.xml:本例文件是已手动建好的空文件(可在程序中生成指定路径的空文件)
public static void builXml(String filename){
//数据源(也可是数据库查询的一个集合对象)
String[][] books ={
{"1001","武侠","天龙八部","金庸","60","1965","zh"},
{"1002","科幻","哈利波特","rowLing","86","1969","en"},
....
}
//创建一个空的文档对象
Document doc =DocumentHelper.createDocument();
//创建根元素
Element rootElmt=doc.addElement("booklist");
//增加每本书(每条数据)的元素
for(String[] book : books){
Element bookElmt = rootElmt.addElement("book");
//增加每本书的子元素(每条数据的子元素)
Element titleElmt = bookElmt.addElement("title");
Element authorElmt = bookElmt.addElement("author");
Element priceElmt = bookElmt.addElement("price");
Element yearElmt = bookElmt.addElement("year");
//给子元素添加数据
titleElmt.setText(book[2]);
authorElmt.setText(book[3]);
priceElmt .setText(book[4]);
yearElmt .setText(book[5]);
//给book元素增加两个属性:isbn="1001" calalog="武侠"
bookElmt.addAttribute("isbn",book[0]);
bookElmt.addAttribute("calalog",book[1]);
//给title元素增加一个属性:lang="zh"
titleElmt.addAttribute("lang",book[6]);
}
outputXml(doc,filename);
}
/*********************输出document文档对象到指定位置的xml文件****************************************/
private static void outputXml(Document coc ,String filename){
try{
//创建一个java.io包中的FileWriter对象,指定要生成的目标文件
FileWriter fw = new FileWriter(filename);
//指定xml文件的输出格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
//写xml文件到操作系统
XMLWriter xmlWriter = new XMLWriter(fw , format);
xmlWriter.write(doc);
xmlWriter.close();
}catch(IOException e){
e.printStackTrace();
}
}
XML文件中搜索某个节点的值(按照文件的格式读取内容):--------------
1) XPath:在 XML 文件中查找或定位信息的语言:XPath 可以通过元素/属性/值来定位或导航
2) 节点(Node): 相当于 XML 文件中的元素
3) 指定条件定位元素的方式
一:读取xml文件的所有元素
public Static void readBook(String filename){
SAXReader reader =new SAXReader(); //解析器
File file=new File(filename); //指定xml文件
try{
Document doc =reader.read(file); //开始解析,建立树形结构并返回
//Element rootElmt=doc.getRootElement(); //获得根元素:书籍列表
//List list= rootElmt.elements("武侠小说"); //获得所有武侠小说的元素集合
Node root = doc.selectSingleNode("/booklist");//取根节点(根元素),绝对路径:/booklist,相对路径:book
//查所有元素
List<Element> list = root.selectNodes("book");
for(Element e : list){
String title =e.elementText("title")---e元素的子元素title元素的内容
String zh =e.element("title").attributeValue("lang");---e元素的子元素title元素的属性
String isbn=e.attributeValue("isbn");---e元素的属性
}
//查询指定的元素
//查找所有中文书:lang=zh是title的属性(list中存放的都是title元素,book/title:相对路径,[@lang='zh']:过滤条件)
List<Element> list = root.selectNodes("book/title[@lang='zh'] ");
//查询所有武侠类书:book元素属性:catalog="武侠",list里的元素是book元素
List<Element> list = root.selectNodes("book[@catalog='武侠'] ");
//查询价格大于80的书:price是book的子元素,list里的每个元素是book元素
List<Element> list = root.selectNodes("book[price > 80] ");
//查询作者是金庸的书或古龙的书
List<Element> list = root.selectNodes("book[author='金庸' or author='古龙'] ");
//查询英文价格大于80的书
List<Element> list = root.selectNodes("book[price > 80 and title[@lang='en']] ");
for(Element e : list){
e.getStringValue();
}
}catch(DocumentException e){
e.printStackTrace();
}
}
相关推荐
xml写入读取例子,上课做到WEB应用程序。
使用Document读取及写入XML方法 使用XmlTextWriter写入XML方法 使用XmlTextReader读取XML方法 作用SqlCommand.ExecuteXmlReader()取得XML
由Spring Boot支持的企业就绪生产就绪批处理应用程序 项目batch-web-spring-boot-starter是Spring Batch的Spring Boot启动器,除了编写作业外... :使用作业参数在xml中配置的作业,该作业参数从文件读取并写入数据库
6-1-1开发目的及内容 6-1-2 Access及SQL 执行安装 关于取得数据库的连接 6-2 DataGrid控制项 6-2-1编辑及储存 编辑及储存基本设计 编辑时锁定部份栏位 编辑时使用多种控制项 6-2-...
\r\n 4.2.2 使用XmlReader类读取XML数据的步骤\r\n 4.3 写入XML数据 \r\n 4.4 小结 \r\n第5章 XML数据验证\r\n 5.1 XML验证 \r\n 5.1.1 .NET Framework 2.0支持的验证类型 \r\n 5.1.2 使用XSD模式验证XML数据 ...
XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了。本文将指导大家如何运用C#语言完成.Net框架下的XML文档的读写操作。
&1.XML简介 XML的背景 1) XML代表可扩展的标记语言(eXtensible Markup Language); 2) XML由W3C联盟发展维护; 3) XML是一种元语言,可以用来定义其它标签语言; 4) XML没有定义任何标记,它提供了一种工具定义...
� MVC 和 Web APP 架构 Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的...
C# linq 与xml基础 怎样用linq快速读取xml数据方法势力 , 读取写入xml数据,.netweb项目 C#代码一样
.net程序设计课程所做的实验(代码以及实验报告),使用VS2010开发;使用的时候请自己创建数据库然后修改数据库连接字符串,实验...用web service读取数据并写入XML文档。 3.使用XML控件显示写入的xml文档。 第二部分:
C# XML入门经典——C#编程人员必备的XML技能 作者:[美]Stewart Fraser, Steven 著,毛尧飞,崔伟 译 出版社:清华大学出版社 出版时间:2003年11月 第1章 在C#中使用XML的原因 <br>1.1 使用XML的原因...
poi组件 主要用于读取以及写入Microsoft Office格式档案 JSR 303 为实体验证定义了一个元数据模型和API 前端技术选型 JS框架:jQuery 1.8 CSS框架:Twitter Bootstrap 项目所需jar包列表 antlr-2.7.7.jar classmate-...
使用JSP开发Web项目时,web.xml文件一般位于目录结构中的_____下。 A. src目录 B. 文档根目录或其子文件夹 C. META-INF目录 D. WEB-INF目录 3. 下列代码的输出结果是______ <script> var s = "2,3,4,5,6"; document...
介绍示例客户管理系统和邮件应用程序,从邮件系统读取和写入。 技术栈大纲1. Java EE 8:Bean 验证使用 JSR(349) 2. Spring MVC 3.2.3 3. RESTful/JSON 服务使用 Spring MVC 3.2.3 4. Web App Init 使用 JavaConfig,...
缓存就是当选中treeview节点时,访问缓存(url)判断是否有xml数据,这面分两种情况,当无缓存时,我们在这面要第一次读取,读取完将xml数据写入缓存并记录当前的读取时间,显示xml数据。当有缓存时,判断时间是否...
使用XML库,它使用户可以轻松地构建/读取图形文件,包括属性,GEXF viz属性(例如颜色,大小和位置),网络动态(对于边缘和节点,包括咒语)和边缘权重。 用户可以按元素或通过数据框架大量构建/处理图形,通过...
该文件在整个应用程序中读取和写入。 每个单独的写入都会导致整个文件在以后写入磁盘。 桌面版 Firefox 使用 10 种不同的数据存储格式。 这些都是 SQLite 索引数据库 无扩展字符分隔文件(AlternateServices、...
6.2.1 读取和写入CSV文件 133 6.2.2 gob包 135 6.3 Go与SQL 137 6.3.1 设置数据库 138 6.3.2 连接数据库 140 6.3.3 创建帖子 142 6.3.4 获取帖子 144 6.3.5 更新帖子 145 6.3.6 ...
Part1第一部分: 相信大家找得到该书的源代码部分 也就是这部分内容 因此我便无偿奉送 让大家下载试试。 若感觉可以方可继续下载电子书部分。 1.本书1~21章所附代码的运行环境 操作系统:Windows Server 2003或...