DIDLParser从DIDLContent生成XML和Parse XML 得到 DIDLContent

来源:互联网 发布:淘宝卖家草稿箱在哪里 编辑:程序博客网 时间:2024/06/05 10:56

XML通过DIDLParser类的generate从DIDLContent生成。

            try{                //使用didl得到answer,好像是一个xml,是String类型啊                /*变成一个字符串*/                answer = new DIDLParser().generate(didl);            }            catch (Exception ex)            {                throw new ContentDirectoryException(                        ContentDirectoryErrorCode.CANNOT_PROCESS, ex.toString());            }

是这个方法,实际是将DIDLContent变为一个xml

public String generate(DIDLContent content, boolean nestedItems) throws Exception {    return this.documentToString(this.buildDOM(content, nestedItems), true);}protected String documentToString(Document document, boolean omitProlog) throws Exception {    TransformerFactory transFactory = TransformerFactory.newInstance();    Transformer transformer = transFactory.newTransformer();    if(omitProlog) {        transformer.setOutputProperty("omit-xml-declaration", "yes");    }    StringWriter out = new StringWriter();    transformer.transform(new DOMSource(document), new StreamResult(out));    return out.toString();}

实际过程是:首先是DIDLContent经过BuildDOM来构造得到一个Document对象,然后对这个Document对象操作得到String类型对象。

protected Document buildDOM(DIDLContent content, boolean nestedItems) throws Exception {    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    factory.setNamespaceAware(true);    Document d = factory.newDocumentBuilder().newDocument();    this.generateRoot(content, d, nestedItems);    return d;}

以下代码来自cling库:

xml经过parse之后,得到DIDLContent才能给app使用,parse的过程如下:

public DIDLContent parse(String xml) throws Exception {    if(xml != null && xml.length() != 0) {        DIDLContent content = new DIDLContent();        this.createRootHandler(content, this);        log.fine("Parsing DIDL XML content");        this.parse(new InputSource(new StringReader(xml)));        return content;    } else {        throw new RuntimeException("Null or empty XML");    }}

上面的函数调用了:

public void parse(InputSource source) throws ParserException {    try {        this.xr.parse(source);    } catch (Exception var3) {        throw new ParserException(var3);    }}

实际调用的是XMLReader(接口类)的方法parse:

import java.io.IOException;
import org.xml.sax.ContentHandler;
import org.xml.sax.DTDHandler;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;

public interface XMLReader {
boolean getFeature(String var1) throws SAXNotRecognizedException, SAXNotSupportedException;

void setFeature(String var1, boolean var2) throws SAXNotRecognizedException, SAXNotSupportedException;Object getProperty(String var1) throws SAXNotRecognizedException, SAXNotSupportedException;void setProperty(String var1, Object var2) throws SAXNotRecognizedException, SAXNotSupportedException;void setEntityResolver(EntityResolver var1);EntityResolver getEntityResolver();void setDTDHandler(DTDHandler var1);DTDHandler getDTDHandler();void setContentHandler(ContentHandler var1);ContentHandler getContentHandler();void setErrorHandler(ErrorHandler var1);ErrorHandler getErrorHandler();void parse(InputSource var1) throws IOException, SAXException;void parse(String var1) throws IOException, SAXException;

}

原创粉丝点击