XML解析,XPath,Dom4j

XML
        固定格式:<?xml version="1.0" encoding="utf-8" ?>必须是在第一行
         一个xml文件只能有一个跟标签:标签命名不能使用关键字xml,XML不能有空格不能有冒号不能以数字作为开头
         一个元素也就是<person  属性(id=2)><person/>里面的属性只能有一个同名的但是可以有多个属性例如id,只能有一个id属性但是可以同事写name属性等等。
         在xml中"<"  ">"  "&"是非法的,可以使用转义符"<"是"&lt"   ">"是"&gt"   "&"是&amp
          CDATA:格式:
 

<!--格式-->
<![CDATA[
	文本数据   < >  & ; " "
]]>




<!--例子-->
<![CDATA[
    if salary < 1000 then
]]

dtd约束
       格式:

<DOCTYPE 跟标签(例如:persons)[
         <!ELEMENT 跟标签(例如persons)(子标签(例如:person*))>
                  <ELEMENT 内容标签(例如:name)(#PCDATA)>
                  <ELEMENT 内容标签(例如:age)(#PCDATA)>
   ]>
	<!--约束根标签 book* 表示books标签下可以有多个book子标签
 		* + ? 和正则表达式中表示的意思是一样的
		* :  0 1 n
		+ : 1 n
		? :  0 1
 	-->


   <persons>
        <person>
            <name>张三</name>
            <age>18</age>
        </person>
   </persons>

上边的约束就是讲他们的内容进行约束顺序也不能变,写了约束以后就必须name标签在age标签前边
还有schema约束,不过一般都是写的3w约束
   如果是mybatis一般都是这个

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

用这个就行,下边的自己写。
 

Dom4j:
        dom4j的原理:将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM树进行操作。以下面books.xml文档为例。
         

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="0001"> 
        <name>JavaWeb开发教程</name>
        <author>张孝祥</author>
        <sale>100.00元</sale>
    </book>
    <book id="0002">
        <name>三国演义</name>
        <author>罗贯中</author>
        <sale>100.00元</sale>
    </book>
</books>

以上边的为例子:用dom4j来解析

 在java中首先他是用SAXReader的构造方法的Document read(String url)来加载xml到document,然后再获取他的根元素
例子:
     

    public static void main(String[] args) throws Exception{
        File file = new File("E:\\heiManote\\Employment\\18代码在17day这是18day\\src\\Person.xml");
        SAXReader saxReader = new SAXReader();
        Document read = saxReader.read(file);   //先获取xml加载的document


        //第一种方法剥洋葱式的一层一层剥开
        Element rootElement = read.getRootElement();  //等到跟标签
        List<Element> elements = rootElement.elements();  //得到子标签集合
        for (Element element : elements) {   //遍历得到子标签的内容标签
            System.out.println(element.element("name").getText());    //name就是内容的标签然后getText得到里面的内容
        }

        //第二种是直接得到
        List<Node> list = read.selectNodes("//最高温度[level=\"C\"]");  //      selectNode的“//”表示不受约束,//最高温度   就是找到xml中   <最高温度></最高温度>的标签[level=\"C\"]"   是找<最高温度 level="C"></最高温度>的标签的level属性为c
        for (Node o : list) {
            System.out.println(o.getText());
        }
    }

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值