XML和XML解析
1. XML文件:
什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
2.XML文件的优点:
1)XML文档内容和结构完全分离。
2)互操作性强。
3)规范统一。
4)支持多种编码。
5)可扩展性强。
3.如何解析XML文档:
XML在不同的语言中解析XML文档都是一样的,只不过实现的语法不一样,基本的解析方式有两种,一种是SAX方式,是按照XML文件的顺序一步一步解析。另外一种的解析方式DOM方式,而DOM方式解析的关键就是节点。另外还有DOM4J、JDOM等方式。本文介绍的是DOM、DOM4J方式与封装成一个工具类的方式来读取XML文档。
4.XML文档:
scores.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
<!ELEMENT students (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
]>
<students>
<student id="11">
<name>张三</name>
<course>JavaSE</course>
<score>100</score>
</student>
<student id="22">
<name>李四</name>
<course>Oracle</course>
<score>98</score>
</student>
</students>
5.DOM方式解析XML
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//1.创建DOM解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.由DOM解析器工厂创建DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.由DOM解析器解析文档,生成DOM树
Document doc = db.parse("scores.xml");
//4.解析DOM树,获取文档内容(元素 属性 文本)
//4.1获取根元素scores
NodeList scoresList = doc.getChildNodes();
Node scoresNode = scoresList.item(1);
System.out.println(scoresList.getLength());
//4.2获取scores中所有的子元素student
NodeList studentList = scoresNode.getChildNodes();
System.out.println(studentList.getLength());
//4.3对每个student进行处理
for(int i=0;i<studentList.getLength();i++){
Node stuNode = studentList.item(i);
//System.out.println(stuNode.getNodeType());
//输出元素的属性 id
if(stuNode.getNodeType()==Node.ELEMENT_NODE){
Element elem =(Element)stuNode;
String id= elem.getAttribute("id");
System.out.println("id------>"+id);
}
//输出元素的子元素 name course score
NodeList ncsList = stuNode.getChildNodes();
//System.out.println(ncsList.getLength() );
for(int j=0;j<ncsList.getLength();j++){
Node ncs = ncsList.item(j);
if(ncs.getNodeType() == Node.ELEMENT_NODE){
String name = ncs.getNodeName();
//String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild
String value = ncs.getTextContent();
System.out.println(name+"----->"+value);
}
}
System.out.println();
}
}
6.DOM4J方式解析XML文档:
public static void main(String[] args) throws DocumentException {
//使用dom4j解析scores2.xml,生成dom树
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("scores.xml"));
//得到根节点:students
Element root = doc.getRootElement();
//得到students的所有子节点:student
Iterator<Element> it = root.elementIterator();
//处理每个student
while(it.hasNext()){
//得到每个学生
Element stuElem =it.next();
//System.out.println(stuElem);
//输出学生的属性:id
List<Attribute> attrList = stuElem.attributes();
for(Attribute attr :attrList){
String name = attr.getName();
String value = attr.getValue();
System.out.println(name+"----->"+value);
}
//输出学生的子元素:name,course,score
Iterator <Element>it2 = stuElem.elementIterator();
while(it2.hasNext()){
Element elem = it2.next();
String name = elem.getName();
String text = elem.getText();
System.out.println(name+"----->"+text);
}
System.out.println();
}
}
当然,无论我们是使用那种方式解析XML的,都需要导入jar包(千万不要忘记)。
7.我自己的方式:
在实际开发的工程中,我们要善于使用工具类,将我们反复使用的功能封装成一个工具类,所以,下面的方式就是我在开发的过程中使用的方式.
7.1什么是properties文件:
7.1.1 从结构上讲:
.xml文件主要是树形文件。
.properties文件主要是以key-value键值对的形式存在
7.1.2 从灵活的角度来说:
.xml文件要比.properties文件的灵活读更高一些。
7.1.3 从便捷的角度来说:
.properties文件比.xml文件配置更加简单。
7.1.4 从应用程度上来说:
.properties文件比较适合于小型简单的项目,因为.xml更加灵活。
7.2自己的properties文档:
在我自己的项目中创建了一个path.properties文件,里面用来存放我即将使用的路径,以名字=值的方式存放。例如:
realPath = D:/file/
- 1
7.3 解析自己的.properties文件:
public class PropertiesUtil {
private static PropertiesUtil manager = null;
private static Object managerLock = new Object();
private Object propertiesLock = new Object();
private static String DATABASE_CONFIG_FILE = "/path.properties";
private Properties properties = null;
public static PropertiesUtil getInstance() {
if (manager == null) {
synchronized (managerLock) {
if (manager == null) {
manager = new PropertiesUtil();
}
}
}
return manager;
}
private PropertiesUtil() {
}
public static String getProperty(String name) {
return getInstance()._getProperty(name);
}
private String _getProperty(String name) {
initProperty();
String property = properties.getProperty(name);
if (property == null) {
return "";
} else {
return property.trim();
}
}
public static Enumeration<?> propertyNames() {
return getInstance()._propertyNames();
}
private Enumeration<?> _propertyNames() {
initProperty();
return properties.propertyNames();
}
private void initProperty() {
if (properties == null) {
synchronized (propertiesLock) {
if (properties == null) {
loadProperties();
}
}
}
}
private void loadProperties() {
properties = new Properties();
InputStream in = null;
try {
in = getClass().getResourceAsStream(DATABASE_CONFIG_FILE);
properties.load(in);
} catch (Exception e) {
System.err
.println("Error reading conf properties in PropertiesUtil.loadProps() "
+ e);
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {
}
}
}
/**
* 提供配置文件路径
*
* @param filePath
* @return
*/
public Properties loadProperties(String filePath) {
Properties properties = new Properties();
InputStream in = null;
try {
in = getClass().getResourceAsStream(filePath);
properties.load(in);
} catch (Exception e) {
System.err
.println("Error reading conf properties in PropertiesUtil.loadProperties() "
+ e);
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {
}
}
return properties;
}
}
XML和XML解析的更多相关文章
- XML数据的解析
XML数据的解析 相比于JSON数据解析而言,XML数据解析可能会让更多的童鞋感觉到吃力,对我来说,同样认为JSON数据好像让人感觉比较友好,不过对于程序开发者来说,无非就是这两种数据解析占比较大的部 ...
- Python读取xml报错解析--ExpatError: not well-formed (invalid token)
xml文件内容如代码所示存入的名字为login.xml: <?xml version="1.0" encoding="utf-8"?> <in ...
- iOS开发笔记3:XML/JSON数据解析
这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...
- Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题
1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...
- Android之XML序列化和解析
XML文件是一种常用的文件格式,可以用来存储与传递数据 ,本文是XML文件序列化与解析的一个简单示例 写文件到本地,并用XML格式存储 /** * 写xml文件到本地 */ private void ...
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- 使用jaxp对比xml进行DOM解析
/*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...
- Android基础总结(12)——XML和JSON解析
XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...
- js解析xml,获取XMl标签属性值
<script type="text/javascript"> var xml="<?xml version=\"1.0\" enc ...
- JDOM方法实现对XML文件的解析
首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...
随机推荐
- sudo: unable to execute ./xxx.py: no such file or directory
$ ./mk_dataset.py -bash: ./mk_dataset.py: /home/ocean1101/anaconda3/bin/python^M: bad interpreter: N ...
- centos7 忘记mysql root登录密码
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的状态下,其他的用户也可以任意地登录和 ...
- Linux下ping: unknown host www.baidu.com的解决办法
如果ping域名的时候出现ping:unknown host xxx.xxx 但是ping IP地址的时候可以通的话 可知是dns服务器没有配置好, 查看一下配置文件/etc/resolv.conf ...
- Metasploit入门教程
0.Metasploit简介 Metasploit是一款开源的渗透测试框架平台,到目前为止,msf已经内置了数千个已披露的漏洞相关的模块和渗透测试工具,模块使用ruby语言编写,这使得使用者能够根据需 ...
- 深入理解C语言-深入理解内存四区
数组与指针 当数组做函数参数的时候,会退化为一个指针 此时在函数内是得不到数组大小的 因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数 void func(int arr[], int ...
- [计蒜客T2237]魔法_树
魔法 题目大意: 数据范围: 题解: 这个题挺好玩的 可以用反证法,发现所有叶子必须都得选而且所有叶子都选了合法. 故此我们就是要使得,一次操作之后使得叶子的个数最少. 这怎么弄呢? 我们发现,如果一 ...
- vm下centos7 mini版 NAT模式下配置静态IP
1.查看虚拟机的默认网关和子网掩码 a.vm菜单栏点击编辑->虚拟网络编辑器 b.选择VMnet8,点击NAT设置,查看子网掩码.网关IP 2. 修改服务器的网络配 ...
- idea的配置文件------application.properties和application.yml
当application.yml 和 application.properties 两个文件同时存在的时候,application.properties的优先级是高于application.yml的, ...
- 区间DP(入门)括号匹配
https://www.nitacm.com/problem_show.php?pid=8314 思路:类似于https://blog.csdn.net/MIKASA3/article/details ...
- LeetCode 160——相交链表(JAVA)
编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...