免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中西医结合执业医师实践技能模拟试卷(附操作流程)
- 银行从业资格银行业法律法规与综合能力章节练习
- 税务师涉税服务实务历年真题回顾与练习
- 2027年消防器材购销合同二篇
- 2027年马匹买卖合同二篇
- 劳务挂靠合同最终
- 加油站便利店采购合同
- 2025年AI性格匹配的模型鲁棒性测试
- 线上教育平台原型设计合作框架协议
- 江苏省自考07950药学导论高频考点重点
- 有限空间作业安全技术规范与实操培训
- 2026年天津中考地生会考(真题)及参考答案
- 黑龙江省龙东地区2026年中考历史真题真卷附答案
- 2026江苏南京市栖霞区人民政府迈皋桥街道办事处公开招聘编外聘用人员19人笔试题库(黄金题型)附答案详解
- 2026中国公证协会招5人笔试题库及参考答案详解
- 工艺技术变更管理流程
- 新人教版初中英语七八九年级全部单词全集
- 2026新教材语文 三年级上册第七单元22 《读不完的大书》说课教学课件
- 《精细化工生产技术 》课件-涂料新技术-创新驱动绿色未来
- 2026年文旅行业安全生产试题及答案
- 2026年三级健康管理师《操作技能》考试真题(后附答案及解析)
评论
0/150
提交评论