XML: EXtensible Markup Language

1. Basic Syntax

1.1 Processing instruction

<? ... ?> format
  • e.g.
<?xml version= "1.0" encoding= "utf-8" ?>
  • Must have:

    • version
  • Optional:

    • standalone: yes/no : 不使用外部声明
    • encoding: utf-8/gbk ...

1.2 element & attribute

  • element: <tag attribute="..." ...>...</tag>
  • 属性:单双引号皆可

1.3 大小写敏感

  • HTML:大小写不敏感

1.4 必须有根元素

1.5 实体引用

实体:任何包含数据的项

实体中要使用转义字符:

&lt; <
&gt; >
&amp; &
&apos; '
&quot; "

1.6 CDATA block

format: <![CDATA [ text ]]>
无论text写什么,都当作普通文本

2. Parsers

2.1 SAX & DOM

  • SAX: simple API for XML

    • Pros: 逐行扫描,边扫描边解析,速度快
    • Cons: 不能对节点进行修改
  • DOM: Document Object Model

    • pros: 构造Tree,方便遍历和修改
    • cons: 对于大文件,内存压力大
  • DOM4J:
DOM4J is an open source, Java-based library to parse XML documents.
DOM4J works with DOM, SAX, XPath, and XSLT. It can parse large XML documents with very low memory footprint.

3. DOM4J

3.1 SAXReader:

        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File(filename));

3.2 Document

    Element root = doc.getRootElement();

3.3 Element

  • Element element(String name); // 获取name子元素
  • List<Element> elements();
  • String getName();
  • String getText();
  • Attribute attribute(int index / String name);

3.4 Attribute

  • String getName();
  • String getValue();

3.5 Write

3.5.1 Create Document

            Document DocumentHelper.createDocument();
            Document的addElement():只能调用一次
                Element root = doc.addElement("project");

3.5.2 Element

  • addElement(String name);
  • addAttribute(String name, String val);
  • addText(String txt);

3.5.3 Output

            XMLWriter writer = new XMLWriter();
            FileOutputStream fos = new FileOutputStream('new.xml');
            writer.setOutputStream(fos);
            writer.write(doc);
            writer.close();

3.6 XPath

  • absolute path: starts with /
  • relative path: step/step
. current node
.. the parent of current node
/ Selection starts from the root node
// 任意位置的某个节点
@ 选择属性

Predicates:

[predicates]
/books/book[1] 选择第一个book子元素
/books/book[last()] 选择最后一个book子元素
/books/book[@lang] 选择有lang属性的子元素
/books/book[@lang='eng'] 选择有lang属性为eng的子元素
/books/book[price] 选择有price子元素的book
/books/book/price[.>35.00] 选择大于35的/books/book/的price子元素

通配符:

* 任何元素
@* 任何属性
node() 任何类型的节点
//* 所有元素
/*/* 所有第二层元素

DOM4J对XPath的支持:

List list = doc.selectNodes("...");

jShawn
1 声望0 粉丝

Become a better person everyday.


« 上一篇
jQuery Note