解析XML

XML全称为Extensible Markup Language,意思是可扩展的标记语言<a></a>。

XML文档声明格式:

<?xml version="1.0" encoding="UTF-8"?>

  1. 文档声明必须为<?xml开头,以?>结束;
  2. 文档声明必须从文档的0行0列位置开始;
  3. 文档声明只有2个属性:
    1. versioin:指定XML文档版本。必须属性,一般选择1.0;
    2. encoding:指定当前文档的编码。可选属性,默认值是utf-8

XML文档元素<bean>元素体</bean>

  1. 元素是XML文档中最重要的组成部分,
  2. 普通元素的结构开始标签、元素体、结束标签组成。例如:<hello>大家好</hello>
  3. 元素体:元素体可以是元素,也可以是文本,例如:<b><a>你好</a></b>
  4. 空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合,例如:<c/>;<c attr=”ceshi” />
  5. 元素命名:
    1. 区分大小写
    2. 不能使用空格,不能使用冒号:
    3. 不建议以XML、xml、Xml开头
  6. 格式化良好的XML文档,必须只有一个根元素。

XML文档<bean> 对象的属性

<bean id=”” className=””>

  1. 属性是元素的一部分,它必须出现在元素的开始标签中
  2. 属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
  3. 一个元素可以有0~N个属性,但一个元素中不能出现同名属性
  4. 属性名不能使用空格、冒号等特殊字符,且必须以字母开头

XML文档的注释

XML的注释,以“<!--”开始,以“-->”结束

XML文档的约束

DTD(常用的有struts2、hibernate)、Schema(常用的有spring)

XML文档的简析方式

  1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。XML树
    1. 优点:解析过程中,树结构保存在内存中,元素与元素之间保留结构关系,方便修改,故可以进行增删改查操作。
    2. 缺点:XML文档过大,容易影响解析性能且可能会造成内存溢出。
  2. SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。
    1. 优点:处理速度快,可以处理大文件
    2. 缺点:只能读,逐行后将释放资源。

PULL:Android内置的XML解析方式,类似SAX。(了解,没见过)

常用的解析包(dom4j是必备技能)

    1. JAXP:sun公司提供支持DOM和SAX开发包
    2. JDom:dom4j兄弟
    3. jsoup:一种处理HTML特定解析开发包
    4. dom4j:比较常用的解析开发包,hibernate底层采用。

DOM4j的使用

  1. 如需要使用dom4j,必须导入jar包,dom4j-**.jar
  2. 使用核心类SaxReader加载xml文档获取Document对象
  3. 常用的API方法
    1. SaxReader对象
      1. read(…) 加载执行xml文档
    2. Document对象
      1. getRootElement() 获得根元素
    3. Element对象
      1. elements(…) 获得指定名称的所有子元素。可以不指定名称
      2. element(…) 获得指定名称第一个子元素。可以不指定名称
      3. getName() 获得当前元素的元素名
      4. getStringName()获得当前元素的值
      5. attributeValue(…) 获得指定属性名的属性值
      6. elementText(…) 获得指定名称子元素的文本值
      7. getText() 获得当前元素的文本内容

代码样例

 public static void main(String[] args) {
        //创建SAXReader对象
        SAXReader saxReader = new SAXReader();
        try {
            //使用read方法读取test.xml,生成document对象,try_catch异常
            Document doc = saxReader.read(new File(("src/res/test.xml")));
            //获取根元素
            Element rootElement = doc.getRootElement();
            //获取根元素下面的所有子元素
            List<Element> list = rootElement.elements();
            //循环遍历子元素
            for(Element element : list){
                String id =element.attributeValue("id");
                String className = element.attributeValue("className");
                System.out.println(id+""+className);
                //获取子元素下面的子元素指定属性的属性值
                List<Element>listElem = element.elements();
                for(Element elem : listElem){
                    String name = elem.attributeValue("name");
                    String value = elem.attributeValue("value");
                    System.out.println(name+""+value);
                }
                //获取xml元素的名称和元素值
                Iterator<Element> iterator = element.elementIterator();
                while (iterator.hasNext()) {
                    Element elem = iterator.next();
                    String name = elem.getName();
                    String stringValue = elem.getStringValue();
                    System.out.println("节点名:" + name + "--节点值:" + stringValue);
                }
            }

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值