2、读取xml文档的例子:
- import org.jdom.output.*;
- import org.jdom.input.*;
- import org.jdom.*;
- import java.io.*;
- import java.util.*;
- public class ReadXML{
- public static void main(String[] args) throws Exception {
- SAXBuilder builder = new SAXBuilder();
- Document read_doc = builder.build("studentinfo.xml");
- Element stu = read_doc.getRootElement();
- List list = stu.getChildren("student");
- for(int i = 0;i < list.size();i++) {
- Element e = (Element)list.get(i);
- String str_number = e.getChildText("number");
- String str_name = e.getChildText("name");
- String str_age = e.getChildText("age");
- System.out.println("---------STUDENT--------------");
- System.out.println("NUMBER:" + str_number);
- System.out.println("NAME:" + str_name);
- System.out.println("AGE:" + str_age);
- System.out.println("------------------------------");
- System.out.println();
- }
- }
- }
3、DTD验证的:
- public class XMLWithDTD {
- public void validate() {
- try {
- SAXBuilder builder = new SAXBuilder(true);
- builder.setFeature("http://xml.org/sax/features/validation";,true);
- Document doc = builder.build(new FileReader("author.xml"));
- System.out.println("搞掂");
- XMLOutputter outputter = new XMLOutputter();
- outputter.output(doc, System.out);
- }catch(Exception e) {
- System.out.println(e);
- }
- }
- public static void main(String args[]) {
- new XMLWithDTD().validate();
- }
- }
4、XML Schema验证的:
- public class XMLWithSchema {
- String xml="test.xml";
- String schema="test-schema.xml";
- public void validate() {
- try {
- SAXBuilder builder = new SAXBuilder(true);
- //指定约束方式为XML schema
- builder.setFeature("http://apache.org/xml/features/validation/schema";, true);
- //导入schema文件
- uilder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";,schema);
- Document doc = builder.build(new FileReader(xml));
- System.out.println("搞掂");
- XMLOutputter outputter = new XMLOutputter();
- outputter.output(doc, System.out);
- }catch(Exception e) {
- System.out.println("验证失败:"+e);
- }
- }
- }
上面的程序就指出了要引入的XML Schema文件的位置。
5、Xpath例子:
JDOM的关于XPATH的api在org.jdom.xpath这个包里。这个包下,有一个抽象类XPath.java和实现类JaxenXPath.java, 使用时先用XPath类的静态方法newInstance(String xpath)得到XPath对象,然后调用它的selectNodes(Object context)方法或selectSingleNode(Object context)方法,前者根据xpath语句返回一组节点(List对象);后者根据一个xpath语句返回符合条件的第一个节点(Object类型)。请看jdom-1.0自带的范例程序:
它分析在web.xml文件中的注册的servlet的个数及参数个数,并输出角色名。
web.xml文件:
- xml version="1.0" encoding="ISO-8859-1"?>
- <web-app>
- <servlet>
- <servlet-name>snoopservlet-name>
- <servlet-class>SnoopServletservlet-class>
- servlet>
- <servlet>
- <servlet-name>fileservlet-name>
- <servlet-class>ViewFileservlet-class>
- <init-param>
- <param-name>initialparam-name>
- <param-value>1000param-value>
- <description>
- The initial value for the counter
- description>
- init-param>
- servlet>
- <servlet-mapping>
- <servlet-name>mvservlet-name>
- <url-pattern>*.wmurl-pattern>
- servlet-mapping>
- <distributed/>
- <security-role>
- <role-name>managerrole-name>
- <role-name>directorrole-name>
- <role-name>presidentrole-name>
- security-role>
- web-app>
处理程序:
- import java.io.*;
- import java.util.*;
- public class XPathReader {
- public static void main(String[] args) throws IOException, JDOMException {
- if (args.length != 1) {
- System.err.println("Usage: java XPathReader web.xml");
- return;
- }
- String filename = args[0];//从命令行输入web.xml
- PrintStream out = System.out;
- SAXBuilder builder = new SAXBuilder();
- Document doc = builder.build(new File(filename));//得到Document对象
- // Print servlet information
- XPath servletPath = XPath.newInstance("//servlet");//,选择任意路径下servlet元素
- List servlets = servletPath.selectNodes(doc);//返回所有的servlet元素。
- out.println("This WAR has "+ servlets.size() +" registered servlets:");
- Iterator i = servlets.iterator();
- while (i.hasNext()) {//输出servlet信息
- Element servlet = (Element) i.next();
- out.print("\t" + servlet.getChild("servlet-name")
- .getTextTrim() +
- " for " + servlet.getChild("servlet-class")
- .getTextTrim());
- List initParams = servlet.getChildren("init-param");
- out.println(" (it has " + initParams.size() + " init params)");
- }
- // Print security role information
- XPath rolePath = XPath.newInstance("//security-role/role-name/text()");
- List roleNames = rolePath.selectNodes(doc);//得到所有的角色名
- if (roleNames.size() == 0) {
- out.println("This WAR contains no roles");
- } else {
- out.println("This WAR contains " + roleNames.size() + " roles:");
- i = roleNames.iterator();
- while (i.hasNext()) {//输出角色名
- out.println("\t" + ((Text)i.next()).getTextTrim());
- }
- }
- }
- }
输出结果:
C:\java>java XPathReader web.xml
This WAR has 2 registered servlets:
snoop for SnoopServlet (it has 0 init params)
file for ViewFile (it has 1 init params)
This WAR contains 3 roles:
manager
director
president
注: 要使用XPath必须导入包:saxpath.jar,jaxen-core.jar,jaxen-jdom.jar!!!!