android使用XML-----DOM--------进阶

来源:互联网 发布:出售淘宝买家资料 编辑:程序博客网 时间:2024/06/03 12:21

当XML文件中含有ENTITY实体时,需要解析器,解析。主要步骤:

  1. </pre></li></ol></p><pre name="code" class="java">DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(true);//该解析器在解析时验证 XML 内容。factory.setIgnoringElementContentWhitespace(true);//该解析器忽略元素内容中的可忽略空格。factory.setExpandEntityReferences(true);//将工厂配置为生成扩展实体引用节点的解析器。try {DocumentBuilder builder = factory.newDocumentBuilder();MyEntityResolver resolver = new MyEntityResolver();//设置解析器 public class MyEntityResolver implements EntityResolver 该类继承自<span style="font-family: Arial, Helvetica, sans-serif;">EntityResolver </span>ErrorHandler handler = new MyErrorHandler();//设置<span style="font-family: Arial, Helvetica, sans-serif;">ErrorHandler 来捕获SAXParseException异常 public class MyErrorHandler implements ErrorHandler</span><pre name="code" class="java"> 该类实现了自<span style="font-family: Arial, Helvetica, sans-serif;">ErrorHandler接口</span>

    builder.setEntityResolver(resolver);// builder.setErrorHandler(handler);doc = (Document) builder.parse(xmlFile);} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}


    程序架构:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration [<!ELEMENT configuration (title)><!ELEMENT title (font)><!ELEMENT font (name,size,lable)><!ELEMENT name ANY><!ELEMENT size ANY><!ELEMENT lable ANY><!ENTITY label SYSTEM "label.dat">]><configuration><title><font><name>Helvetica</name><size>36</size><lable>&label;</lable></font></title></configuration>


    XML 的一些注意事项:
    1. 开启验证之后,必须要声明类型 如configuraiton
    2. <?xml  > 必须是一体的不能分开 <? xml>
    3. &label;  ;不能少
    package com.lmk.test.dom_xml;import java.io.File;import java.io.IOException;import javax.script.SimpleScriptContext;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.ErrorHandler;import org.xml.sax.SAXException;import com.lmk.test.InfoUtil;public class DomXMLparser {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubDomXMLparser parser = new DomXMLparser();File xmlFile = new File("test.xml");if(!xmlFile.exists()){parser.createFile(xmlFile);}Document doc=parser.getDoc(xmlFile);parser.parse(doc);}private void parse(Document doc) {// TODO Auto-generated method stubElement configuration = (Element) doc.getDocumentElement();//获得根节点Element title = (Element) configuration.getFirstChild();Element font = (Element) title.getFirstChild();NodeList children = font.getChildNodes();Node second = children.item(1);InfoUtil.info(second.getTextContent());Node third = children.item(2);InfoUtil.info(third.getTextContent());}private   Document getDoc(File xmlFile) {Document doc = null;DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(true);factory.setIgnoringElementContentWhitespace(true);factory.setExpandEntityReferences(true);try {DocumentBuilder builder = factory.newDocumentBuilder();MyEntityResolver resolver = new MyEntityResolver();ErrorHandler handler = new MyErrorHandler();builder.setEntityResolver(resolver);//builder.setErrorHandler(handler);doc = (Document) builder.parse(xmlFile);} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return doc;}private void createFile(File xmlFile) {// TODO Auto-generated method stubtry {xmlFile.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

    package com.lmk.test.dom_xml;import java.io.IOException;import java.io.InputStream;import java.net.URL;import org.xml.sax.EntityResolver;import org.xml.sax.InputSource;import org.xml.sax.SAXException;public class MyEntityResolver implements EntityResolver {@Overridepublic InputSource resolveEntity(String publicId, String systemId)throws SAXException, IOException {if(systemId != null){InputStream in = this.getClass().getResourceAsStream("label.dat");InputSource source = new InputSource(in);}else{}return null;}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}}


    这里是错误的!!!!!!!!!
    重新审视 EntityResolver 的作用

0 0
原创粉丝点击