XML Notebook

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("...");

ul

相关推荐