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

当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 stub
    		DomXMLparser 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 stub
    		Element 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 block
    			e.printStackTrace();
    		} catch (SAXException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return doc;
    	}
    
    	private void createFile(File xmlFile) {
    		// TODO Auto-generated method stub
    		
    		try {
    			xmlFile.createNewFile();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.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 {
    
    	@Override
    	public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值