jdom学习(4)

Jdom使用详解及实例(4)
接上一节:

2、读取xml文档的例子:

java 代码
 
  1. import org.jdom.output.*;  
  2.   
  3. import org.jdom.input.*;  
  4.   
  5. import org.jdom.*;  
  6.   
  7. import java.io.*;  
  8.   
  9. import java.util.*;  
  10.   
  11. public class ReadXML{  
  12.   
  13.     public static void main(String[] args) throws Exception {  
  14.   
  15.         SAXBuilder builder = new SAXBuilder();  
  16.   
  17.         Document read_doc = builder.build("studentinfo.xml");  
  18.   
  19.         Element stu = read_doc.getRootElement();  
  20.   
  21.         List list = stu.getChildren("student");  
  22.   
  23.         for(int i = 0;i < list.size();i++) {  
  24.   
  25.             Element e = (Element)list.get(i);  
  26.   
  27.             String str_number = e.getChildText("number");  
  28.   
  29.             String str_name = e.getChildText("name");  
  30.   
  31.             String str_age = e.getChildText("age");  
  32.   
  33.             System.out.println("---------STUDENT--------------");  
  34.   
  35.             System.out.println("NUMBER:" + str_number);  
  36.   
  37.             System.out.println("NAME:" + str_name);  
  38.   
  39.             System.out.println("AGE:" + str_age);  
  40.   
  41.             System.out.println("------------------------------");  
  42.   
  43.             System.out.println();  
  44.   
  45.         }   
  46.   
  47.        }  
  48.   
  49. }  

3DTD验证的:

java 代码
 
  1. public class XMLWithDTD {  
  2.   
  3.   public void validate()  {  
  4.   
  5.    try {  
  6.   
  7.     SAXBuilder builder = new SAXBuilder(true);  
  8.   
  9.     builder.setFeature("http://xml.org/sax/features/validation";,true);  
  10.   
  11.     Document doc = builder.build(new FileReader("author.xml"));     
  12.   
  13.     System.out.println("搞掂");  
  14.   
  15.     XMLOutputter outputter = new XMLOutputter();  
  16.   
  17.     outputter.output(doc, System.out);  
  18.   
  19.    }catch(Exception e) {  
  20.   
  21.     System.out.println(e);  
  22.   
  23.    }    
  24.   
  25.   }  
  26.   
  27.   public static void main(String args[]) {  
  28.   
  29.    new XMLWithDTD().validate();  
  30.   
  31.   }   
  32.   
  33.  }  

4XML Schema验证的:

java 代码
 
  1. public class XMLWithSchema {  
  2.   
  3.  String xml="test.xml";  
  4.   
  5.  String schema="test-schema.xml";  
  6.   
  7.  public void validate() {  
  8.   
  9.   try {  
  10.   
  11.    SAXBuilder builder = new SAXBuilder(true);  
  12.   
  13.    //指定约束方式为XML schema  
  14.   
  15.    builder.setFeature("http://apache.org/xml/features/validation/schema";,  true);  
  16.   
  17.    //导入schema文件  
  18.   
  19. uilder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";,schema);  
  20.   
  21.    Document doc = builder.build(new FileReader(xml));     
  22.   
  23.    System.out.println("搞掂");  
  24.   
  25.    XMLOutputter outputter = new XMLOutputter();  
  26.   
  27.    outputter.output(doc, System.out);  
  28.   
  29.   }catch(Exception e) {  
  30.   
  31.    System.out.println("验证失败:"+e);  
  32.   
  33.   }   
  34.   
  35.  }  
  36.   
  37. }  

 上面的程序就指出了要引入的XML Schema文件的位置。

5Xpath例子:

JDOM的关于XPATHapiorg.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 代码
 
  1. xml version="1.0" encoding="ISO-8859-1"?>  
  2. <web-app>  
  3.     <servlet>  
  4.         <servlet-name>snoopservlet-name>  
  5.         <servlet-class>SnoopServletservlet-class>  
  6.     servlet>  
  7.     <servlet>  
  8.         <servlet-name>fileservlet-name>  
  9.         <servlet-class>ViewFileservlet-class>  
  10.         <init-param>  
  11.             <param-name>initialparam-name>  
  12.             <param-value>1000param-value>  
  13.             <description>  
  14.                 The initial value for the counter    
  15.             description>  
  16.         init-param>  
  17.     servlet>  
  18.     <servlet-mapping>  
  19.         <servlet-name>mvservlet-name>  
  20.         <url-pattern>*.wmurl-pattern>  
  21.     servlet-mapping>  
  22.     <distributed/>  
  23.     <security-role>  
  24.       <role-name>managerrole-name>  
  25.       <role-name>directorrole-name>  
  26.       <role-name>presidentrole-name>  
  27.     security-role>  
  28. web-app>  

处理程序:

java 代码
 
  1. import java.io.*;  
  2.   
  3. import java.util.*;   
  4.   
  5. public class XPathReader {       
  6.   
  7.     public static void main(String[] args) throws IOException, JDOMException {  
  8.   
  9.         if (args.length != 1) {  
  10.   
  11.             System.err.println("Usage: java XPathReader web.xml");  
  12.   
  13.             return;  
  14.   
  15.         }  
  16.   
  17.         String filename = args[0];//从命令行输入web.xml  
  18.   
  19.         PrintStream out = System.out;  
  20.   
  21.         SAXBuilder builder = new SAXBuilder();  
  22.   
  23.         Document doc = builder.build(new File(filename));//得到Document对象  
  24.   
  25.    
  26.   
  27.         // Print servlet information  
  28.   
  29.         XPath servletPath = XPath.newInstance("//servlet");//,选择任意路径下servlet元素  
  30.   
  31.         List servlets = servletPath.selectNodes(doc);//返回所有的servlet元素。  
  32.   
  33.         out.println("This WAR has "+ servlets.size() +" registered servlets:");  
  34.   
  35.         Iterator i = servlets.iterator();  
  36.   
  37.         while (i.hasNext()) {//输出servlet信息  
  38.   
  39.             Element servlet = (Element) i.next();  
  40.   
  41.             out.print("\t" + servlet.getChild("servlet-name")  
  42.   
  43.                                     .getTextTrim() +  
  44.   
  45.                       " for " + servlet.getChild("servlet-class")  
  46.   
  47.                                        .getTextTrim());  
  48.   
  49.             List initParams = servlet.getChildren("init-param");  
  50.   
  51.             out.println(" (it has " + initParams.size() + " init params)");   
  52.   
  53.         }               
  54.   
  55.         // Print security role information  
  56.   
  57.         XPath rolePath = XPath.newInstance("//security-role/role-name/text()");  
  58.   
  59.         List roleNames = rolePath.selectNodes(doc);//得到所有的角色名  
  60.   
  61.         if (roleNames.size() == 0) {  
  62.   
  63.             out.println("This WAR contains no roles");  
  64.   
  65.         } else {  
  66.   
  67.             out.println("This WAR contains " + roleNames.size() + " roles:");  
  68.   
  69.             i = roleNames.iterator();  
  70.   
  71.             while (i.hasNext()) {//输出角色名  
  72.   
  73.                 out.println("\t" + ((Text)i.next()).getTextTrim());  
  74.   
  75.             }  
  76.   
  77.         }  
  78.   
  79.     }      
  80.   
  81. }   

输出结果:

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!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值