热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解析_XML解析

本文由编程笔记#小编为大家整理,主要介绍了XML 解析相关的知识,希望对你有一定的参考价值。 XML 1. XML 是 可扩展标识语言Extensible Markup Language, 在xml命
本文由编程笔记#小编为大家整理,主要介绍了XML 解析相关的知识,希望对你有一定的参考价值。


XML
1. XML 是 可扩展标识语言Extensible Markup Language, 在xml命名规则的基础上,根据自己的需求定义自己的标签
成对出现,
2. XML 文件的作用: 存储数据, 配置文件
3. 解析 xml 文件的方法: DOM, DOM4J, SAX
前两个是一次性读取到内存中,然后进行解析, SAX是 边读边解析, 大的配置文件 事件驱动

*** DOM4J 解析 xml 文件
包: dom4j-1.6.1.jar

SAXReader: 解析器,生成树对象
Document: 一个 xml 文档对象树,
Element: 元素节点。通过 Document 对象

创建 解析器,
生成树对象通过



// 元素节点
唐僧
110
师傅


孙悟空
100
大师兄

** Myeclipse 解析 xml文件
更换工作空间: File -> switch workspace
设置字符集: preferences -> general - workspace text file encoding -> utf-8
设置JDK 版本:preferences ->  java -> compiler(installed jres)

** 创建工程 java project ctrl +n prj-xml  
新建文件夹 lib 导入 dom4j-1.6.1.jar
新建包 com.pw.xml
新建文件夹 conf 放置xml文件 students.xml

创建class Dom4jTest



public class Dom4jTest {
public static void main(String args[]){
try{
// 创建解析器
SAXReader reader = new SAXReader();

// 通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象树
Document document = reader.read("conf/students.xml");

// 获取根节点
Element root = document.getRootElement();
for(Iterator rootIter = root.elementIterator();rootIter.hasNext();){
Element studentElt = rootIter.next()
for(Iterator innerIter = studentElt.elementIterator();innerIter.hasNext();){
Element innerElt = innerIter.next();
String innerValue = innerElt.getStringValue();
System.out.println(innerValue);
}
System.out.println("----------------------")
}
}
catch(Exception e){
e.printStackTrace();
}
}
}


*** SAX 解析 xml 文件
无需将整个文档加载到内存中, 内存占用下
创建解析工厂SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
创建解析器
执行 parse 方法 参数: File f, DefaultHandler dh 解析器,处理程序
开始标签 startElement() qName 标签名
characters() 将文本返回
结束标签 endElement(String uri, String localName, String qName)

原样输出配置文件内容:


// 元素节点
唐僧
110
师傅


孙悟空
100
大师兄

public class MySAXParser {
public static void main
try{
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
saxParser.parse("conf/persons.xml",new MyDefaultHandler());
}

catch(Exception e){
e.printStackTrace();
}


class MyDefaultHandler extends DefaultHandler {
@override
public void startElement(){
System.out.println("<" + qName + ">");
}

characters()
System.out.println(new String(ch, start, length));
endElement()
System.out.println("");
}
}


****XPath
XPath 使用






try{
SAXReader reader = new SAXReader();

Doucument document = reader.read("conf/sys-config.xml");
// driver-name 节点元素的路径 config-> database-info -> driver-name
// XPath /config/database-info/driver-name
Element driverNameElt = (Element) document.selectSingleNode("/config/database-info/driver-name");
// 获取 driverNameElt 节点元素对象的文本内容
String driverName = driverNameElt.getStringValue();

// url 节点元素的路径 /config/database-info/url config//url //url
Element urlElt = (Element) document.selectSingleNode("/config/database-info/url");
String url = urlElt.getStringValue();

Element userElt = (Element) document.selectObject("/config/database-info/user");
String user = userElt.getText();

Element userElt = (Element) document.selectObject("/config/database-info/user");
String user = userElt.getTextTrim();

}
catch(){

}

*** 使用 Xpath 对象解析 XML 文件 (DocumentBuilder 解析器)


// 元素节点

Erik T. Ray
2003
30.04

// 元素节点

Erik T. Ray
2003
30.04

// 元素节点

Erik T. Ray
2003
30.04



bookstore -> book[@category=‘web‘][2] -> title
/bookstore/book[@category=‘web‘][2]/title/text()

获取bookstore 节点下 book 属性 category 值为 web 下的 title属性 为en的节点内容
bookstore -> book[@category=‘web‘] -> title[@lang=‘en‘]
bookstore/book[@category=‘web‘]/title[@lang=‘en‘] /text()

获取bookstore 节点下 book 属性 category 值为cooking 的 lang属性 的值
bookstore -> book[@category=‘cooking‘] -> title -> @lang
bookstore/book[@category=‘cooking‘]/title/@lang

获取bookstore 节点下 所有 book的节点集合
bookstore -> book
bookstore/book

public class MyXPathTest {



try {
// 创建解析工厂
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// 创建解析器
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
// 通过解析器读取配置文件, 生成一个 Document[org.w3c.dom] 对象树
Document document = builder.parse("conf/bookstore.xml");

// 创建 XPath 对象
XPath xPath = XPathFactory.newInstance().newXPath();

// 返回 Object
String titleXpath = "/bookstore/book[@category=‘web‘][2]/title/text()"
String titleValue = (String)xPath.evaluate(titleXpath, document, XPathConstants.STRING);
System.out.println(titleValue);

String titleLangXpath = "bookstore/book[@category=‘web‘]/title[@lang=‘en‘] /text()"
String titleLangValue = (String)xPath.evaluate(titleLangXpath, document, XPathConstants.STRING);
System.out.println(titleLangValue);

String titleLangAttrXpath = "bookstore/book[@category=‘cooking‘]/title/@lang"
String titleLangAttrValue = (String)xPath.evaluate(titleLangAttrXpath, document, XPathConstants.STRING);
System.out.println(titleLangAttrValue);


NodeList bookList = (NodeList)xPath.evaluate("/bookstore/book", document, XPathConstants.NODESET);
for (int i = 0; i Element bookElt = (Element) bookList.item(i);
String titleValue01 = (String)xPath.evaluate("title", bookElt, XPathConstants.STRING);
String authorValue01 = (String)xPath.evaluate("author", bookElt, XPathConstants.STRING);
String yearValue01 = (String)xPath.evaluate("year", bookElt, XPathConstants.STRING);
String priceValue01 = (String)xPath.evaluate("price", bookElt, XPathConstants.STRING);

System.out.println(titleValue01 + " " + authorValue01 + " " + yearValue01 + " " + priceValue01);
System.out.println("-----------------");
}
System.out.println(titleLangAttrValue);

}
catch(Exception e){
e.printStackTrace();
}
}








































































































































































































































推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
author-avatar
wyzf88_987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有