SAX解析XML(自主判断)

合集下载

SAXContentHandler解析超大的XML内容

SAXContentHandler解析超大的XML内容

SAXContentHandler解析超大的XML内容Java Sax ContentHandler 解析超大的XML解析超大的XML文件或者文本使用如果用常用的方法,100M的文件可能要1个多小时,甚至于还可能出现内存溢出等问题。

本文介绍ContentHandler解析超大的xml内容,100M的内容1~2秒左右就解析并入库成功1、构造一个ContentHandlerimport java.util.ArrayList;import java.util.List;import org.springframework.util.CollectionUtils;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class RecipientHandler extends DefaultHandler {private List<Recipient> recipients;private List<NameValue> fields;private Recipient recipient;private NameValue field;private TestService testService;private StringBuilder sb = new StringBuilder();public RecipientHandler(T estService testService) {this.testService = testService;}@Overridepublic void startDocument() throws SAXException {recipients = new ArrayList<>();fields = new ArrayList<>();}@Overridepublic void endDocument() throws SAXException {saveRecipients();}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { sb.delete(0, sb.length()); // 清空sbif('recipients'.equals(qName)) {recipient = new Recipient();} else if('fields'.equals(qName)) {field = new NameValue();}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if ('recipients'.equals(qName)) {// 将fields整理成recipient对象for (NameValue field : fields) {String name = field.getName();if('name'.equals(name)) {recipient.setName(field.getValue());} else if('create_date'.equals(name)) {recipient.setCreateDate(field.getValue());}}recipients.add(recipient);fields.clear();if (recipients.size() >= 1000) {saveRecipients(); // 保存}} else if('fields'.equals(qName)) {fields.add(field);} else if('id'.equals(qName)){recipient.setId(sb.toString());} else if('name'.equals(qName)){field.setName(sb.toString());} else if('value'.equals(qName)){field.setValue(sb.toString());}}private void saveRecipients() {if(CollectionUtils.isEmpty(recipients) || testService == null) { return;}testService.addRecipients(recipients);recipients.clear();}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {String data = new String(ch, start, length).trim();sb.append(data); // 当文本过大时,可能不能一次取到完整的data值,会分多次获取}}2、使用ContentHandlerXMLReader parser = XMLReaderFactory.createXMLReader();// RecipientHandler 实现了解析数据,并保存到数据库parser.setContentHandler(newRecipientHandler(testService));StringReader stringReader = new StringReader(xmlString);InputSource is = new InputSource(stringReader);is.setEncoding('UTF-8');parser.parse(is);总体代码特别少,SAX一次解析就获取到所有的业务数据。

解析Xml文件的三种方式

解析Xml文件的三种方式

解析Xml⽂件的三种⽅式1、Sax解析(simple api for xml) 使⽤流式处理的⽅式,它并不记录所读内容的相关信息。

它是⼀种以事件为驱动的XML API,解析速度快,占⽤内存少。

使⽤回调函数来实现。

1class MyDefaultHander extends DefaultHandler{2private List<Student> list;3private Student student;45 @Override6public void startDocument() throws SAXException {7super.startDocument();8 list=new ArrayList<>();9 }1011 @Override12public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {13super.startElement(uri, localName, qName, attributes);14if(qName.equals("student")){15 student=new Student();1617 }18 preTag=qName;19 }2021 @Override22public void endElement(String uri, String localName, String qName) throws SAXException {23if(qName.equals("student")){24 list.add(student);25 }26 preTag=null;27 }2829 @Override30public void characters(char[] ch, int start, int length) throws SAXException {31if(preTag!=null){32if(preTag.equals("id")){33 student.setId(Integer.parseInt(new String(ch,start,length)));34 }else if(preTag.equals("name")){35 student.setName(new String(ch,start,length));36 }else if(preTag.equals("age")){37 student.setAge(Integer.parseInt(new String(ch,start,length)));38 }39 }40 }41public List<Student> getStudents(){42return list;43 }44 }45public List<Student> sax_parser(){46 List<Student> list=null;47try {48 SAXParser parser= SAXParserFactory.newInstance().newSAXParser();49 InputStream is= getAssets().open("student.xml");50 MyDefaultHander hander=new MyDefaultHander();51 parser.parse(is,hander);52 list= hander.getStudents();53 } catch (ParserConfigurationException e) {54 e.printStackTrace();55 } catch (SAXException e) {56 e.printStackTrace();57 } catch (IOException e) {58 e.printStackTrace();59 }60return list;61 }2、Dom解析 DOM(Document Object Model) 是⼀种⽤于XML⽂档的对象模型,可⽤于直接访问XML⽂档的各个部分。

Android SAX 方式解析XML 字符串

Android SAX 方式解析XML 字符串

这个是主类:import java.io.StringReader;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.XMLReader;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;public class ParsingXML extends Activity {private final String MY_DEBUG_TAG = "WeatherForcaster";public void onCreate(Bundle icicle) {super.onCreate(icicle);TextView tv = new TextView(this);String xml = "<VCOM version='1.1'><loginlink>aHR0cDovLzE5Mi4xNjguMTA0LjExMy9ldW1zL2NsaWV udC90ZW1 wbGF0ZTIwMDA vbW9iaWxlZW50cnkucGhwP3VzZXJuYW1lPWNlc2hp</loginlink><errmsg ></errmsg></VCOM>";// 创建一个新的字符串StringReader read = new StringReader(xml);// 创建新的输入源SAX 解析器将使用InputSource 对象来确定如何读取XML 输入InputSource source = new InputSource(read);try {SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser sp = spf.newSAXParser();XMLReader xr = sp.getXMLReader();ExampleHandler myExampleHandler = new ExampleHandler();xr.setContentHandler(myExampleHandler);xr.parse(source);ParsedExampleDataSet parsedExampleDataSet = myExampleHandler.getParsedData();String url=Base64Coder.decodeString(parsedExampleDataSet.toString());tv.setText(url);} catch (Exception e) {tv.setText("Error: " + e.getMessage());Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);}this.setContentView(tv);}}下面两个类是以SPX 方式解析XML字符串import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class ExampleHandler extends DefaultHandler{private boolean in_mytag = false;private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();public ParsedExampleDataSet getParsedData() {return this.myParsedExampleDataSet;}public void startDocument() throws SAXException {this.myParsedExampleDataSet = new ParsedExampleDataSet();}public void endDocument() throws SAXException {}public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException {if (localName.equals("loginlink")) {this.in_mytag = true;}}public void endElement(String namespaceURI, String localName, String qName) throws SAXException {if (localName.equals("loginlink")) {this.in_mytag = false;}}public void characters(char ch[], int start, int length) {if(this.in_mytag){myParsedExampleDataSet.setExtractedString(new String(ch, start, length));}}}public class ParsedExampleDataSet {private String extractedString = null;public String getExtractedString() {return extractedString;}public void setExtractedString(String extractedString) { this.extractedString = extractedString;}public String toString(){return "ExtractedString = " + this.extractedString ;}}。

android认证笔试题(一)

android认证笔试题(一)

Andorid认证笔试题(一)(试卷总分:100分,考试时间:120分钟,答案写在答卷纸上)一、单选题(每题1.5分,共60分)1、下面关于java类描述错误的是____。

A.java文件中一个类引用了其他类,可以用import导入。

B. 一个java文件中可以同时定义多个public属性的类。

C. 在一个类中,可以定义与该类类型一样的成员变量。

D. 类的静态成员变量在进入静态函数main之前已经被赋值。

2. 关于java语言平台描述错误的是____。

A.java中的基本数据类型包括byte、int、char、long、float、double、boolean和short。

B. java中char类型采用Unicode编码,占用2个字节。

可以用来保存一个汉字。

C. java中的基本类型变量存储在栈上,对象的实例存储在堆上。

D.执行String string = new String("string");只产生一个对象。

3. 抽象类和接口的区别,说法错误的是____。

A. 抽象类和接口都能被实例化。

B.抽象类的子类为父类中的所有抽象方法提供实现,否则子类也是抽象类。

C. 接口中的所有方法都是抽象的,接口中只能定义static final成员变量。

D.在抽象类中,不能用接口名作为应用变量的类型。

4. 关于接口和抽象类,描述错误的是____。

A. 接口可以继承接口。

B. 接口可以继承抽象类。

C. 抽象类可以实现接口。

D. 抽象类可以继承实体类,前提是实体类必须有明确的构造函数。

5. 关于多态性,描述错误的是____。

A.多态性是指允许不同的类对象对同一消息有不同的响应。

B. 多态性语言具有灵活,抽象,行为共享,代码共享的优势。

C. 通过解决了应用程序函数同名的问题。

D.多态的实现方式静态绑定。

6. 关于Java异常,说法错误的是____。

A. 一般情况下,用try来执行一段程序,如果出现异常,系统会throws一个异常。

Android考试题库

Android考试题库

一、单选题(共33题,共62分)1、(2分) WebView中可以用来处理js中警示,确认等对话框的是(C)A。

WebSettingsB。

WebViewClientC。

WebChromeClientD。

WebViewChrome2、(2分) Android解析xml的方法中,将整个文件加载到内存中进行解析的是?(C)A、SAXB、PULLC、DOM D 、JSON3、(2分)以下属于调用摄像头硬件的权限的是:( A )A。

〈uses—permission android:name="android.permission。

CAMERA"/〉B。

〈uses-permission android:name=”android。

permission。

MOUNT_UNMOUNT_FILESYSTEMS”/〉C。

〈uses-permission android:name="android。

permission.WRITE_EXTERNAL_STORAGE”/> D。

<uses—permission android:name="android。

permission。

INTERNET"/〉4、(1分)使用Android系统进行拍照用到的类有:(D)A。

SurfaceView B。

SurfaceHolder C.Callback D。

Camera5、(2分)LocationManager获取位置信息的途径下列说法不正确的是(B )A, GPS定位更精确,缺点是只能在户外使用B, NETWORK通过基站和Wi— Fi信号来获取位置信息,速度较慢,耗电较少.C,获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。

D, GPS定位耗电严重,并且返回用户位置信息的速度远不能满足用户需求.6、(2分) 在开发AppWidget窗口小部件时, 需要继承(D)类A,AppWidgetReceiverB,AppWidgetConfigureC,AppWidgetManagerD,AppWidgetProvider7、(4分)在AsyncTask中下列哪个方法是负责执行那些很耗时的后台计算工作的(C)A,runB,executeC,doInBackgroundD,onPostExecute8、(2分)如果希望自定义TabHost标题部分的显示内容需要使用下列哪个方法(B)finalTabHosttabHost = getTabHost();A,tabHost。

xml文件解析方法

xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。

在处理XML文件时,解析是必不可少的环节。

本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。

一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。

DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。

DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。

1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。

2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。

3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。

4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。

二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。

在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。

相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。

1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。

2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。

SAX解析器解析xml详解

SAX解析器解析xml详解

XML的解析器原理及性能比较,SAX详解1 DOMDOM 是用与平台和语言无关的方式表示XML 文档的官方W3C 标准。

DOM 是以层次结构组织的节点或信息片断的集合。

这个层次结构允许开发人员在树中寻找特定信息。

分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。

由于它是基于信息层次的,因而DOM 被认为是基于树或基于对象的。

DOM 以及广义的基于树的处理具有几个优点。

首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。

它还可以在任何时候在树中上下导航,而不是像SAX 那样是一次性的处理。

DOM 使用起来也要简单得多。

另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。

这些基于事件的模型,比如SAX。

2 SAX这种处理的优点非常类似于流媒体的优点。

分析能够立即开始,而不是等待所有的数据被处理。

而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。

这对于大型文档来说是个巨大的优点。

事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。

一般来说,SAX 还比它的替代者DOM 快许多。

3 选择DOM 还是选择SAX ?对于需要自己编写代码来处理XML 文档的开发人员来说,选择DOM 还是SAX 解析模型是一个非常重要的设计决策。

DOM 采用建立树形结构的方式访问XML 文档,而SAX 采用的事件模型。

DOM 解析器把XML 文档转化为一个包含其内容的树,并可以对树进行遍历。

用DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。

可以很容易的添加和修改树中的元素。

然而由于使用DOM 解析器的时候需要处理整个XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML 文件的时候。

由于它的遍历能力,DOM 解析器常用于XML 文档需要频繁的改变的服务中。

xml的四种解析方法及源代码

xml的四种解析方法及源代码

xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)第二种:DOM解析DOM中的核心概念就是节点。

DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。

在内存中,这些节点形成一课文档树。

整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。

PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点DOMPrinter.javaJava代码import org.w3c.dom.Document;import dNodeMap;import org.w3c.dom.Node;import .apache.xerces.internal.parsers.DOMParser;public class DOMPrinter{public static void main(String[] args){try{/** *//** 获取Document对象 */DOMParser parser = new DOMParser();parser.parse("db.xml");Document document = parser.getDocument();printNode(document);} catch (Exception e){e.printStackTrace();}}public static void printNode(Node node){short nodeType=node.getNodeType();switch(nodeType){case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型 printNodeInfo(node);break;case Node.ELEMENT_NODE://元素节点类型printNodeInfo(node);printAttribute(node);break;case Node.TEXT_NODE://文本节点类型printNodeInfo(node);break;default:break;}Node child=node.getFirstChild();while(child!=null){printNode(child);child=child.getNextSibling();}}/** *//*** 根据节点类型打印节点* @param node*/public static void printNodeInfo(Node node){if (node.getNodeType() == Node.ELEMENT_NODE){System.out.println("NodeName: " + node.getNodeName()); }else if (node.getNodeType() == Node.TEXT_NODE){String value = node.getNodeValue().trim();if (!value.equals(""))System.out.println("NodeValue: " + value);elseSystem.out.println();}else{System.out.println(node.getNodeName()+" : "+node.getNodeValu e());}}/** *//*** 打印节点属性* @param aNode 节点*/public static void printAttribute(Node aNode){NamedNodeMap attrs = aNode.getAttributes();if(attrs!=null){for (int i = 0; i < attrs.getLength(); i++){Node attNode = attrs.item(i);System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");}}}DOM生成XML文档:DOMCreateExample.javaJava代码import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;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 .apache.xml.internal.serialize.XMLSerializer;public class DOMCreateExample{public static void main(String[] args) throws ParserConfiguratio nException{//DOMImplementation domImp = DOMImplementationImpl.getDOMImple mentation();DocumentBuilderFactory builderFact = DocumentBuilderFactory.ne wInstance();DocumentBuilder builder = builderFact.newDocumentBuilder();Document doc = builder.newDocument();//Document doc = domImp.createDocument(null, null, null);Element root = doc.createElement("games");Element child1 = doc.createElement("game");child1.appendChild(doc.createTextNode("Final Fantasy VII")); child1.setAttribute("genre", "rpg");root.appendChild(child1);doc.appendChild(root);XMLSerializer serial;try{serial = new XMLSerializer(new FileOutputStream("domcreate.x ml"), null);serial.serialize(doc);} catch (FileNotFoundException e1){e1.printStackTrace();} catch (IOException e){e.printStackTrace();}}}第三种JDOM解析JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM 简单易用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SAX解析XML(自主判断)实现方法一:ContentHandler接口:接收文档逻辑内容的通知的处理器接口import org.xml.sax.Attributes;import org.xml.sax.ContentHandler;import org.xml.sax.Locator;import org.xml.sax.SAXException;class MyContentHandler implements ContentHandler{StringBuffer jsonStringBuffer ;int frontBlankCount = 0;public MyContentHandler(){jsonStringBuffer = new StringBuffer();}/** 接收字符数据的通知。

* 在DOM中ch[begin:end] 相当于Text节点的节点值(nodeV alue)*/@Overridepublic void characters(char[] ch, int begin, int length) throws SAXException { StringBuffer buffer = new StringBuffer();for(int i = begin ; i < begin+length ; i++){switch(ch[i]){case '\\':buffer.append("\\\\");break;case '\r':buffer.append("\\r");break;case '\n':buffer.append("\\n");break;case '\t':buffer.append("\\t");break;case '\"':buffer.append("\\\"");break;default : buffer.append(ch[i]);}}System.out.println(this.toBlankString(this.frontBlankCount)+">>> characters("+length+"): "+buffer.toString());}/** 接收文档的结尾的通知。

*/@Overridepublic void endDocument() throws SAXException {System.out.println(this.toBlankString(--this.frontBlankCount)+">>> end document");}/** 接收文档的结尾的通知。

* 参数意义如下:* uri :元素的命名空间* localName :元素的本地名称(不带前缀)* qName :元素的限定名(带前缀)**/@Overridepublic void endElement(String uri,String localName,String qName) throws SAXException {System.out.println(this.toBlankString(--this.frontBlankCount)+ ">>> end element : "+qName+"("+uri+")");}/** 结束前缀URI 范围的映射。

*/@Overridepublic void endPrefixMapping(String prefix) throws SAXException { System.out.println(this.toBlankString(--this.frontBlankCount)+ ">>> end prefix_mapping : "+prefix);}/** 接收元素内容中可忽略的空白的通知。

* 参数意义如下:* ch : 来自XML 文档的字符* start : 数组中的开始位置* length : 从数组中读取的字符的个数*/@Overridepublic void ignorableWhitespace(char[] ch, int begin, int length) throws SAXException {StringBuffer buffer = new StringBuffer();for(int i = begin ; i < begin+length ; i++){switch(ch[i]){case '\\':buffer.append("\\\\");break;case '\r':buffer.append("\\r");break;case '\n':buffer.append("\\n");break;case '\t':buffer.append("\\t");break;case '\"':buffer.append("\\\"");break;default : buffer.append(ch[i]);}}System.out.println(this.toBlankString(this.frontBlankCount)+">>> ignorable whitespace("+length+"): "+buffer.toString());}/** 接收处理指令的通知。

* 参数意义如下:* target : 处理指令目标* data : 处理指令数据,如果未提供,则为null。

*/@Overridepublic void processingInstruction(String target,String data)throws SAXException {System.out.println(this.toBlankString(this.frontBlankCount)+">>> process instruction : (target = \""+target+"\",data = \""+data+"\")");}/** 接收用来查找SAX 文档事件起源的对象。

* 参数意义如下:* locator : 可以返回任何SAX 文档事件位置的对象*/@Overridepublic void setDocumentLocator(Locator locator) {System.out.println(this.toBlankString(this.frontBlankCount)+">>> set document_locator : (lineNumber = "+locator.getLineNumber()+",columnNumber = "+locator.getColumnNumber()+",systemId = "+locator.getSystemId()+",publicId = "+locator.getPublicId()+")");}/** 接收跳过的实体的通知。

* 参数意义如下:* name : 所跳过的实体的名称。

如果它是参数实体,则名称将以'%' 开头,* 如果它是外部DTD 子集,则将是字符串"[dtd]"*/@Overridepublic void skippedEntity(String name) throws SAXException { System.out.println(this.toBlankString(this.frontBlankCount)+">>> skipped_entity : "+name);}/** 接收文档的开始的通知。

*/@Overridepublic void startDocument() throws SAXException {System.out.println(this.toBlankString(this.frontBlankCount++)+">>> start document ");}/** 接收元素开始的通知。

* 参数意义如下:* uri :元素的命名空间* localName :元素的本地名称(不带前缀)* qName :元素的限定名(带前缀)* atts :元素的属性集合*/@Overridepublic void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {System.out.println(this.toBlankString(this.frontBlankCount++)+">>> start element : "+qName+"("+uri+")");}/** 开始前缀URI 名称空间范围映射。

* 此事件的信息对于常规的命名空间处理并非必需:* 当/sax/features/namespaces 功能为true(默认)时,* SAX XML 读取器将自动替换元素和属性名称的前缀。

* 参数意义如下:* prefix :前缀* uri :命名空间*/@Overridepublic void startPrefixMapping(String prefix,String uri)throws SAXException {System.out.println(this.toBlankString(this.frontBlankCount++)+">>> start prefix_mapping : xmlns:"+prefix+" = "+"\""+uri+"\"");}private String toBlankString(int count){StringBuffer buffer = new StringBuffer();for(int i = 0;i<count;i++)buffer.append(" ");return buffer.toString();}}DTDHandler接口:接收与DTD 相关的事件的通知的处理器接口。

相关文档
最新文档