ent )
5. sink = Result->NEW
// Construct transformer
6. tFactory = TransformerFactory->NEW
7. transformer = tFactory->NewTransformer
// Transform
8. transformer->Transfer( source, sink)
通过这个过程的转化,一个 javax.xml.transform.Source 可以转化成为类型 javax.xml.transform.Result。JDK 提供了如 图 5 所示的 4 种 Result 子类型,用户也可以定义自己的 Result 类型。另一方面,用户自定义的数据解析器或者数据文件,也可以作为 Transformer 的输入。下面一个例子,针对一个数据文件,首先生成了一棵 DOM 树,然后又根据这棵 DOM 树,提取了所有的联系信息,生成了一个文本文件。清单 6 给出了这个数据文件:
清单 6. 地址信息文件
work contact-info
Location Shanghai-shuion-333
Postal 200020
Tel
fix 63262299
mobile 1581344454
Appellation Mr. Wang
Java SE 6新特性: XML API与Web服务(6)
时间:2011-02-15 IBM 沈羽
清单 7 为这个信息文件构造一个 DOM 树,并将其作为 transformer 的输入。
清单 7. 构造 DOM 树
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
class ContentHandler extends DefaultHandler {
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String name = new String(ch, start, length);
System.out.print(name + "\t");
}
}
public class DOMTest {
/**
* @param args
* @throws TransformerException
*/
public static void main(String[] args) {
try {
DocumentBuilderFactory documentfactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = documentfactory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("work-contact-info");
Element loca = document.createElement("Location");
loca.setTextContent("Shanghai-shuion-333");
root.appendChild(loca);
Element postal = document.createElement("Postal");
postal.setTextContent("200020");
root.appendChild(postal);
Element tel = document.createElement("Tel");
root.appendChild(tel);
Element fix = document.createElement("fix");
fix.setTextContent("63262299");
tel.appendChild(fix);
Element mobile = document.createElement("mobile");
mobile.setTextContent("1581344454");
tel.appendChild(mobile);
Element appellation = document.createElement("Appellation");
appellation.
|