2011年计算机二级考试JAVA知识点整理(75)

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  错误处理

  模式的默认响应方式是,如果遇到问题则抛出 SAXException,否则什么也不做。但是,可以提供 SAX ErrorHandler 来接收关于文档问题的更详尽的信息。比方说,假设要记录所有验证错误,但又不希望遇到错误时停止处理。可以安装一个像 清单 3 那样的错误处理程序。

  清单 3. 使用 RELAX NG 验证 DocBook 文档

  import org.xml.sax.ErrorHandler;

  import org.xml.sax.SAXException;

  import org.xml.sax.SAXParseException;

  public class ForgivingErrorHandler implements ErrorHandler {

  public void warning(SAXParseException ex) {

  System.err.println(ex.getMessage());

  }

  public void error(SAXParseException ex) {

  System.err.println(ex.getMessage());

  }

  public void fatalError(SAXParseException ex) throws SAXException {

  throw ex;

  }

  }

  要安装该错误处理程序,需要创建它的一个实例并传递给 Validator 的 setErrorHandler() 方法:

  ErrorHandler lenient = new ForgivingErrorHandler();

  validator.setErrorHandler(lenient);

  模式扩充

  有些模式不仅仅执行验证。除了用是否回答文档有效与否的问题外,还为文档补充 其他信息。比方说,可以提供默认的属性值。还可以给元素或属性赋予 int 或 gYear 这样的类型。验证程序可以创建这种补充了类型信息的文档,并写入 javax.xml.transform.Result 对象。只需要传递 Result 作为验证的第二个参数。比如,清单 4 在验证输入文档的同时,还创建结合有模式输入的扩展后的 DOM 文档。

  清单 4. 用模式扩充文档

  import java.io.*;

  import javax.xml.transform.dom.*;

  import javax.xml.validation.*;

  import javax.xml.parsers.*;

  import org.w3c.dom.*;

  import org.xml.sax.SAXException;

  public class DocbookXSDAugmenter {

  public static void main(String[] args)

  throws SAXException, IOException, ParserConfigurationException {

  SchemaFactory factory

  = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

  File schemaLocation = new File("/opt/xml/docbook/xsd/docbook.xsd");

  Schema schema = factory.newSchema(schemaLocation);

  Validator validator = schema.newValidator();

  DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();

  domFactory.setNamespaceAware(true); // never forget this

  DocumentBuilder builder = domFactory.newDocumentBuilder();

  Document doc = builder.parse(new File(args[0]));

  DOMSource source = new DOMSource(doc);

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答