Xml学习(2)

1、CDATA区:

非法字符

严格的讲,在XML中仅有字符“<”和“&”是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好习惯。

<      &lt;

&      &amp;

如果某段字符串里面有过多的字符,并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析,那么可以使用CDATA

             <des><![CDATA[<a href="http://www.baidu.com">我爱Java</a>]]></des>

CDATA部分中的所有内容都会被解析器忽略。由"<![CDATA["开始,由“]]>”结束。CDATA一般比较少看到,通常在服务器给客户端返回数据的时候。

2、XML解析

>其实就是获取里面的字符数据或者属性数据。

3、XML解析方式面试常问

>有很多种,但是常用的有两种

>DOM:(document Object model)把所有文档全部读取到内存当中形成树结构,整个文档称之为document对象,属性对应Attribute对象,所有元素节点对应Element对象,文本称之为Text对象,以上所有对象称之为Node节点。如果xml特别大,则造成内存溢出,可以对文档进行增删。

>SAX:Simple API for xml ,基于事件驱动,读取一行,解析一行。不会造成内存溢出,不可以进行增删,只能查询。

针对这两种解析方式的API

      jaxp(sun公司,比较繁琐)、jdom、dom4j(使用比较广泛)

4、Dom4j基本用法

1)创建SaxReader对象、

2)指定解析的xml

3)获取根元素

4)根据根元素获取子元素或者下面的子孙元素

try {
            //1. 创建sax读取对象
            SAXReader reader = new SAXReader(); //jdbc -- classloader
            //2. 指定解析的xml源
            Document  document  = reader.read(new File("src/xml/stus.xml"));            
            //3. 得到元素、
            //得到根元素
            Element rootElement= document.getRootElement();
            
            //获取根元素下面的子元素 age
            //rootElement.element("age") 
            //System.out.println(rootElement.element("stu").element("age").getText());


            //获取根元素下面的所有子元素 。 stu元素
            List<Element> elements = rootElement.elements();
            //遍历所有的stu元素
            for (Element element : elements) {
                //获取stu元素下面的name元素
                String name = element.element("name").getText();
                String age = element.element("age").getText();
                String address = element.element("address").getText();
                System.out.println("name="+name+"==age+"+age+"==address="+address);
            }
}catch (Exception e){
    e.printStackTrace();
}

5、Dom4j的Xpath使用

>dom4j里面支持Xpath的写法。xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素

1)添加jar包依赖        jaxen-1.1-beta-6.jar

2)在查找指定节点的时候,根据XPath语法规则来查找

3)后续的代码与以前的·解析代码一样。           

//要想使用Xpath, 还得添加支持的jar 获取的是第一个 只返回一个。 

Element nameElement = (Element) rootElement.selectSingleNode("//name");
System.out.println(nameElement.getText());

System.out.println("----------------");

//获取文档里面的所有name元素 
List<Element> list = rootElement.selectNodes("//name");
for (Element element : list) {
    System.out.println(element.getText());
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值