XML Notebook

  1. Basic Syntax

================

1.1 Processing instruction

format
  • e.g.
  • Must have:

    • version
  • Optional:

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

1.2 element & attribute

  • element: ...
  • 属性:单双引号皆可

1.3 大小写敏感

  • HTML:大小写不敏感

1.4 必须有根元素

1.5 实体引用

实体:任何包含数据的项

实体中要使用转义字符:

<

<

>

&

&

'

'

"

"

1.6 CDATA block

format:
无论text写什么,都当作普通文本
  1. 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.
  1. 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 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("...");

你可能感兴趣的:(xml)