科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[王洪伟]JSR 206: Java API for XML Processing (JAXP) 1.3

[王洪伟]JSR 206: Java API for XML Processing (JAXP) 1.3

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

JAXP (全称Java API for XML Parsing)1.3 增加了XML的可插拔性(pluggability),开发人员可以编写自己的xml处理器,只要它符合JAXP的APIs,这样底层不同的xml处理器可以任意切换而不用改应用程序的代码。

作者:王洪伟 来源:CSDN 2007年9月28日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

文档对象模型解析
  
  DOM 解析是基于对象的原理,当用DOM解析XML文档时它会在内存中生成一个树形的结构来表示一个XML文档。树上的每个节点代表着XML文档中的一个节点。如果一个DOM解析器符合W3C标准,那它产生的DOM就是W3C的DOM,使用org.w3c.dom APIs就能遍历和修改这个DOM。
  
  大部分DOM解析器允许你抽取XML文档里的一部分来生成DOM树,而不是把整个XML文档在内存中建立对应DOM树。

使用JAXP, 通过DOM parse XML document的代码片断:
  
  DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
  dbfactory.setNamespaceAware(true);
  DocumentBuilder domparser = dbfactory.newDocumentBuilder();
  //parse the XML and create the DOM
  Document doc = domparser.parse(new File("data.xml"));
  //to create a new DOM from scratch -
  //Document doc = domparser.newDocument();
  //once you have the Document handle, then you can use
  //the org.w3c.dom.* APIs to traverse or modify the DOM...
  
  在校验模式下进行解析
  
  根据DTD校验

  
  DTD 是XML 文档的语法。经常人们会觉得DTD有点另类,因为它和XML的syntax不一样,但DTD是W3C XML1.0里的完整的一部分。如果一份XML文档声明了DOCTYPE,并且想在解析的时候根据DTD校验文档,那你必须在适当的factory里启用根据DTD校验文档(validation)这个特性。例如:
  
  DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
  dbfactory.setValidating(true);
  OR
  SAXParserFactory spfactory = SAXParserFactory.newInstance();
  spfactory.setValidating(true);
  
  注意,如果XML文档声明了一个DTD ,即使你不启用校验(validation)这个特性,解析器总是试着去读入这个DTD。 这样做的目的是为了保证XML文档中entity reference被正确的扩展了,否则会导致格式不正确的XML文档,只有在XML文档序言部分的声明中standalone属性被置为true时,外部的DTD才会被完全忽略掉。例如:
  
  <?xml version="1.1" encoding="UTF-8" standalone="yes"?>
  
  根据W3C Schema来校验XML文档(WXS)
  
  XMLSchema 是XML文档的另外一种文法描述。XMLSchema非常流行市因为它和XML文档使用同样的语法并且提供了丰富的定义校验限制的特性。如果一个XML文档用"schemaLocation" 和"noNamespaceSchemaLocation"指向了一个schema,结下来你想启用根据XMLSchema校验文档这个特性,你还要做如下的步骤:
  
  1.和上面说的一样,调用SAXParserFactory o或DocumentBuilderFactory的setValidating函数来启用validation这个特性。
  
  2.把属性 "http://java.sun.com/xml/jaxp/properties/schemaLanguage" 值设为 "http://www.w3.org/2001/XMLSchema"
  
  注意,这种情况下,即使XML文档有DOCTYPE声明,处理器仍不会用DTD来校验这个文档。但是和前面提到的一样,为了任何一个entity reference是被正确扩展的,这个DTD还是会被装载的,
  
  既然"schemaLocation" 和"noNamespaceSchemaLocation"仅仅是提示,所以可以使用属性"http://java.sun.com/xml/jaxp/properties/schemaSource"从外部提供schemas来覆盖这些提示。
  
  对于这个属性,一些可以接受值是:
  
  ·是一个代表schema的URL地址的字符串。
  
  ·java.io.InputStream with the contents of the schema
  
  ·org.xml.sax.InputSource
  
  ·java.io.File
  
  ·一个 java.lang.Object 的数组,数组内容是上面所提到三类中的一个。
  
  例如:
  
  SAXParserFactory spfactory = SAXParserFactory.newInstance();
  spfactory.setNamespaceAware(true);
  //turn the validation on
  spfactory.setValidating(true);
  //set the validation to be against WXS
  saxparser.setProperty("http://java.sun.com/xml/jaxp/properties/
  schemaLanguage", "http://www.w3.org/2001/XMLSchema");
  //set the schema against which the validation is to be done
  saxparser.setProperty("http://java.sun.com/xml/jaxp/properties/
  schemaSource", new File("myschema.xsd"));



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1593724

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章