SAX解析xml时命名空间以及参数问题.doc_第1页
SAX解析xml时命名空间以及参数问题.doc_第2页
SAX解析xml时命名空间以及参数问题.doc_第3页
SAX解析xml时命名空间以及参数问题.doc_第4页
SAX解析xml时命名空间以及参数问题.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAX解析xml时命名空间以及参数问题本文以实例形式解释下java利用SAX解析xml时命名空间及其参数问题。(关于xml使用及命名空间的详细展开,可以参考W3school官方教程,这里提供的是关于主题的敏捷版)1.命名空间直观感受首先对命名空间有个直观感受,请看下面的未使用命名空间的xml代码。清单1-1 :books.xmlhtml view plaincopyprint?1. 2. 3. 4. HarryPotter5. JK.Rowling6. 7. 8. LearningXML9. ErikT.Ray10. 11. Harry Potter J K. Rowling Learning XML Erik T. Ray 然后请看下面使用了命名空间的xml代码。清单1-2: NameSpaceDemo.xmlhtml view plaincopyprint?1. 2. 3. 4. 5. 6. HarryPotter7. JK.Rowling8. 9. 10. 11. LearningXML12. ErikT.Ray13. 14. Harry Potter J K. Rowling Learning XML Erik T. Ray 可以看出命名空间的形式,就是如下图所示结构:这里关键几个概念是:命名空间标识符NamespaceIdentifier命名空间与java中包机制类似,用来避免在同一文件中包含相同名称但结构不同的元素时可能出现的冲突。命名空间标识符可以使用URL以及其他方式,本例中对应的标识符是 命名空间前缀Prefix前缀就是命名空间的快捷引用方式,它也称作命名空间的别名(alias)。本例中对应的是 jd不带前缀和命名空间的本地名称LocalName (Part)本例中是booktitle author。带有别名前缀的限定名QualifiedName (qName)由别名前缀,冒号以及元素名称组成,这些名称很清晰,可被解析器解析和验证。本例中是jd:book jd:title默认命名空间就是省去前缀的命名空间,这样在后续的书写时就不用带上前缀了。例如本例中的 Learning XML Erik T. Ray 使用的就是默认命名空间。2.java SAX解析xml参数问题这里尤其以方法,public void startElement(String uri, String localName, String qName, Attributes attributes) 为例.uri- 代表命名空间的标识符,当元素没有命名空间或者解析器的命名空间支持特性没有打开时是空串。注意,可以使用SAXParserFactory的public void setNamespaceAware(boolean awareness)打开支持命名空间特性。localName - 代表没有前缀的本地名,当支持命名空间特性没有打开时是空串。qName - 代表带有前缀的限定名,当限定名不能获取时是空串。attributes - 与元素相关的属性,如果没有属性,那么就是空的属性对象。下面给出解析上面带有命名空间的xml文档的实例代码,通过观察结果,更好的理解上述参数。代码清单:SAXTest.javahtml view plaincopyprint?1. packagecom.learningjava;2. 3. importjava.io.File;4. importjava.util.ArrayList;5. importjavax.xml.parsers.SAXParser;6. importjavax.xml.parsers.SAXParserFactory;7. importorg.xml.sax.Attributes;8. importorg.xml.sax.SAXException;9. importorg.xml.sax.helpers.DefaultHandler;10. 11. /*12. *ThisprogramillustrateusingSAXtoparserxml13. *authorwangdq14. *2011-11-715. */16. publicclassSAXTest17. publicstaticvoidmain(Stringargs)throwsException18. 19. /step1:getaparser20. SAXParserFactoryfactory=SAXParserFactory.newInstance();21. factory.setNamespaceAware(true);/performeNamespaceprocessing22. SAXParserparser=factory.newSAXParser();23. /step2:createahandler24. DefaultHandlerhandler=newDefaultHandler()25. 26. Override27. publicvoidstartElement(Stringuri,StringlocalName,28. StringqName,Attributesattributes)throwsSAXException29. 30. System.out.format(uri:%-25stlocalname:%-10stqname:%-10s%n,uri,localName,qName);31. if(localName.equals(title)32. title=true;33. 34. 35. Override36. publicvoidendElement(StringnamespaceURI,StringlocalName,StringqName)37. throwsSAXException38. /Endofprocessingcurrentelement39. if(title)40. title=false;41. 42. 43. Override44. publicvoidcharacters(charch,intstart,intlength)45. /Processingcharacterdatainsideanelement46. if(title)47. StringbookTitle=newString(ch,start,length);48. bookList.add(bookTitle);49. 50. 51. Override52. publicvoidendDocument()throwsSAXException53. System.out.println(wehavebooks:+bookList);54. 55. ArrayListbookList=newArrayList();56. privatebooleantitle=false;57. ;58. /step3attachahandlerandbeginParsingthexml59. parser.parse(newFile(NameSpaceDemo.xml),handler);60. 61. package com.learningjava;import java.io.File;import java.util.ArrayList;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/* * This program illustrate using SAX to parser xml * author wangdq * 2011-11-7 */public class SAXTest public static void main(String args) throws Exception /step1 : get a parserSAXParserFactory factory = SAXParserFactory.newInstance();factory.setNamespaceAware(true);/performe Namespace processingSAXParser parser = factory.newSAXParser();/step2: create a handlerDefaultHandler handler = new DefaultHandler() Override public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException System.out.format(uri: %-25stlocalname: %-10stqname: %-10s%n,uri,localName,qName); if(localName.equals(title) title = true; Override public void endElement(String namespaceURI, String localName, String qName) throws SAXException / End of processing current element if (title) title = false; Override public void characters(char ch, int start, int length) / Processing character data inside an element if (title) String bookTitle = new String(ch, start, length); bookList.add(bookTitle); Override public void endDocument ()throws SAXException System.out.println(we have books: +bookList); ArrayList bookList = new ArrayList(); private boolean title =false;/step3 attach a handler and begin Parsing the xmlparser.parse(new File(NameSpaceDemo.xml), handler);运行结果 uri: localname: books qname: books uri: localname: book qname: jd:book uri: localname: title qname: jd:title uri: localname: author qname: jd:autho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论