可扩展标记语言XML(淅淅沥沥的小雨)
Posted 技术之路永无止境~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可扩展标记语言XML(淅淅沥沥的小雨)相关的知识,希望对你有一定的参考价值。
XML简述
XML用于描述数据,是当前处理结构化文档信息的有力工具。与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互。
xml文件结构:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <people> 3 <Name>姓名</Name> 4 <Sex>性别</Sex> 5 </people>
代码中第一行是XML声明,它一般在XML文档的第一行。它由两个部分组成:
version:文档符合XML1.0规范。
encoding:文档字符编码,默认为“UTF-8”。
<!--注释-->为注释语法。
XML语言有3个特点:
1.XML中的每对标记通常被称为节点,他们是成对出现而且必须成对出现的,用来描述这个节点存储的内容。在节点中存储该节点的信息。
2.XML中用于描述数据的各个节点可以自由横向扩展和纵向扩展,即可以向下扩展也可以向内扩展(嵌套)。
3.XML文件中的节点严格区分大小写。例:<Name>名字</Name>和<name>名字</name>这两个节点内容相同,但节点名称不一样,即是两个节点。
在C#中操作XML文件
在C#中操作并解析XML文件分为6个步骤:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Xml; //1.引入命名空间 7 8 namespace Demo 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 XmlDocument doc = new XmlDocument(); //2.创建XML文件对象 15 doc.Load("Path.xml"); //3.从指定路径读取整个XML文件的结构 16 XmlNode nodes = doc.DocumentElement; //4.获取XML文件的根节点 17 foreach (XmlNode node in nodes.ChildNodes) //5.遍历根节点的子节点 18 { 19 string name = node["name"].InnerText; //6.获取XML文件节点中的内容 20 string sex = node["sex"].InnerText; 21 Console.WriteLine("姓名:{0},性别:{1}", name, sex); 22 } 23 } 24 } 25 }
XmlDocument对象:
表示整个XML文档,它使用Load方法将指定的XML文件读入XmlDocument对象,Load方法的参数是XML文档的路径。
DocumentElement属性用于获取根节点。
XmlNode对象:
XmlNode对象表示一个XML中的节点。
ChildNodes属性用来获取指定节点的所有子节点。
Name属性可以获取当前节点的名称。 例:<name>名字</name>获取name。
Inner Text属性用来获取当前节点的值。 例:<name>名字</name>获取名字。
Attributes属性可以获取当前节点的特性。 例:<name type="dog">名字</name> Attributes["type"]获取dog。
注意:ChildNodes属性表示当前节点的所有子节点,这里的所有子节点表示的是当前子节点的集合。
XML解析
XML文件除了给开发者看,更多的情况使用程序读取xml文件的内容。这叫做xml解析
XML解析方式(原理不同)
DOM解析
SAX解析
XML解析工具
DOM解析原理:
1)JAXP (oracle-Sun公司官方)
2)JDOM工具(非官方)
3)Dom4J工具(非官方)
三大框架(默认读取xml的工具就是Dom4j)
.......
SAX解析原理:
1)Sax解析工具(oracle-sun公司官方
什么是DOM解析
DOM解析原理:xml解析器一次性把整个xml文档加载进内存,
然后在内存中构建一颗Document的对象树,通过Document对象,
得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。
Dom4j工具
非官方,不在jdk中。
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar
2)编写Dom4j读取xml文件代码
* 示例
/**
* 第一个Dom4j读取xml文档的例子
* @author APPle
*
*/
public class Demo1 {
public static void main(String[] args) {
try {
//1.创建一个xml解析器对象
SAXReader reader = new SAXReader();
//2.读取xml文档,返回Document对象
Document doc = reader.read(new File("./src/contact.xml"));
System.out.println(doc);
} catch (DocumentException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
Domj4读取xml文件
- 节点:
-
Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点
-
- 案列:
/** * 得到节点信息 */ @Test public void test1() throws Exception{ //1.读取xml文档,返回Document对象 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("./src/contact.xml")); //2.nodeIterator: 得到当前节点下的所有子节点对象(不包含孙以下的节点) Iterator<Node> it = doc.nodeIterator(); while(it.hasNext()){//判断是否有下一个元素 Node node = it.next();//取出元素 //继续取出其下面的子节点 //只有标签节点才有子节点 //判断当前节点是否是标签节点 if(node instanceof Element){ Element elem = (Element)node; Iterator<Node> it2 = elem.nodeIterator(); while(it2.hasNext()){ Node n2 = it2.next(); System.out.println(n2.getName()); } } } }
-
案例2:得到xml所有节点(使用递归)
/** * 遍历xml文档的所有节点 * @throws Exception */ @Test public void test2() throws Exception{ //1.读取xml文档,返回Document对象 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("./src/contact.xml")); //得到根标签 Element rooElem = doc.getRootElement(); getChildNodes(rooElem); } /** * 获取 传入的标签下的所有子节点 * @param elem */ private void getChildNodes(Element elem){ System.out.println(elem.getName()); //得到子节点 Iterator<Node> it = elem.nodeIterator(); while(it.hasNext()){ Node node = it.next(); //1.判断是否是标签节点 if(node instanceof Element){ Element el = (Element)node; //递归 getChildNodes(el); } }; }
- 案列:
以上是关于可扩展标记语言XML(淅淅沥沥的小雨)的主要内容,如果未能解决你的问题,请参考以下文章