微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > Oracle开发人员JDOM和XML分析 生成文档

Oracle开发人员JDOM和XML分析 生成文档

时间:06-19 来源:赛迪网 点击:

决此问题提供了另一种方法,事实上降低了对这些类的需要,但是这些类仍然保留了下来,这是因为由于许可证的原因,并不是所有的分析器都支持JAXP,也不是任何地方都安装有JAXP。

生成文档

文档由org.jdom.Documentclass表示,你可以从头建立一个文档:

// This builds: <root/>Document doc = new Document(new Element("root"));

也可以由文件、流、系统ID或URL建立一个文档:

// This builds a document of whatever's in the given resourceSAXBuilder builder = new SAXBuilder();Document doc = builder.build(url);

将几个调用结合在一起,可以很容易地在JDOM中建立一个简单的文档:

// This builds: <root>This is the root</root>Document doc = new Document();Element e = new Element("root");e.setText("This is the root");doc.addContent(e);

如果你是一位非常有才能的用户,你可能更愿意使用"方法链",在这种方式中,多种方法是依次调用的。这种方式之所以有效是因为集合方法返回它们所作用的对象,下面是一个例子:

Document doc = new Document(new Element("root").setText("This is the root"));

为了进行对比,下面给出如何用JAXP/DOM创建相同的文档:

// JAXP/DOMDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();Element root = doc.createElement("root");Text text = doc.createText("This is the root");root.appendChild(text);doc.appendChild(root);

用SAXBuilder生成文档

如前所示,SAXBuilder提供了一种由任意面向字节的数据源来创建文档的简单机制。缺省的无参数SAXBuilder()构造器在后台利用JAXP来选择一个SAX分析器。如果你希望改变分析器,则可以设置javax.xml.parsers.SAXParserFactory系统属性,以指向你的分析器提供的SAXParser Factory实现。对于Oracle9i版本2 XML分析器,应当这样做:

java -Djavax.xml.parsers.SAXParserFactory=oracle.xml.jaxp.JXSAXParserFactory YourApp

对于Xerces分析器,应当这样做:

java -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl YourApp

如果没有安装JAXP,SAXBuilder缺省地指向Apache Xerces。一旦你创建了SAXBuilder实例,你就可以在生成器中设置几个属性,其中包括:setValidation(boolean validate)。

这一方法告诉分析器在生成过程中是否根据Document Type Definition(DTD,文档类型定义)进行验证。缺省设置为"否"(off)。所用的DTD是文档中DocType引用的一个。根据任何其他DTD进行验证是不可能的,因为还没有分析器支持这一功能。setIgnoringElementContentWhitespace(boolean ignoring)。

这一方法告诉分析器是否忽略元素内容中所谓的"可忽略空格(whitespace)"。按照XML1.0规范,元素内容中的空格必须由分析器保留,但当根据DTD进行验证时,分析器可能知道文档的特定部分不会支持空格,所以这一区域的任何空格都是"可忽略的"。其缺省设置为"否"(off)。如果你不希望使一个文档"往返旅行",将输入内容以原样输出的话,那么将这一开关打开通常会使性能略微有些提高。注意,这一标志只有在验证已完成时才有效。而进行验证会导致性能下降,所以这一技巧仅在已应用验证时才有用。setFeature(String name, String value)。

这一方法设置基础SAX分析器的一个特性。这是一个原始的"传递(pass-through)"调用,所以在应用这一方法时应非常小心,因为对特性的错误设置(如弄错名称空间)可能会中断JDOM行为。而且,依靠任何特定分析器特性都会限制可移植性。这一调用对于启用模式验证最为有用。setProperty(String name, Object value)。

这一方法设置基础SAX分析器的一个属性。它也是一个原始的"传递"调用,它具有同样的风险,而且对于有才能的用户同样有用,特别是对于模式验证。下面的代码结合这些方法,利用JAXP选择的分析器读取本地文件,验证功能有效,可忽略的空格都被忽略。

SAXBuilder builder = new SAXBuilder();builder.setValidation(true);builder.setIgnoringElementContentWhitespace(true);Document doc = builder.build(new File("/tmp/foo.xml"));

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top