欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class

程序员文章站 2022-08-30 09:54:00
属性值的解析 ......
package com.swift.kaoshi;

import java.io.File;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

/*
<servlets>
    <servlet>
        <servlet-name>servlet1</servlet-name>
        <servlet-class>cn.itheima.servlets.MyServlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet1</servlet-name>
        <url-pattern>/s1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>servlet2</servlet-name>
        <servlet-class>cn.itheima.servlets.MyServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet2</servlet-name>
        <url-pattern>/s2</url-pattern>
    </servlet-mapping>
</servlets>

二、编写程序,请按以下要求解析XML文件:
1.    接收用户输入一个字符串,例如:”/s1”,要求程序可以通过检索<servlet-mapping>元素下的<url-pattern>元素进匹配,匹配后获取同级的<servlet-name>元素的值;
通过这个值再检索<servlet>元素下的<servlet-name>元素的值进行匹配,匹配成功后,获取同级下的<url-pattern>的值,并打印<url-pattern>的值。<servlet-class>
例如:用户输入:/s1,控制台打印:cn.itheima.servlets.MyServlet1
      用户输入:/s2,控制台打印:cn.itheima.servlets.MyServlet2*/

//dom4j SAX遍历

public class Demo_Dom4j {

    public static void main(String[] args) throws Exception {

//        SAXReader reader = new SAXReader();
//        Document document = reader.read(new File("web.xml"));
//        String servlet_name = null;
//        
//        System.out.println("请输入一个路径字符串:");
//        Scanner scan = new Scanner(System.in);
//        String str = scan.nextLine();
//
//        Element root = document.getRootElement();
//        List<Element> mappings = root.elements("servlet-mapping");
//        for (Element element : mappings) {
//            System.out.println(element);
//            List<Element> urls = element.elements("url-pattern");
//            for (Element url : urls) {
//                System.out.println(url);
//                String text=url.getText();
//                System.out.println(text);
//                if(text.equals(str)) {
//                    Element name=element.element("servlet-name");
//                    servlet_name=name.getText();
//                    System.out.println(servlet_name);
//                }
//            }
//        }
//        System.out.println("===========================================================================");
//        //准备检索servlet
//        List<Element> servlets=root.elements("servlet");
//        for(Element servlet:servlets) {
//            System.out.println(servlet);
//            List<Element> servlet_names=servlet.elements("servlet-name");
//            for(Element servlet_n:servlet_names) {
//                String servlet_name1=servlet_n.getText();
//                System.out.println(servlet_name1);
//                if(servlet_name1.equals(servlet_name)) {
//                    Element servlet_class=servlet.element("servlet-class");
//                    System.out.println("需要查找的类的名称是: "+servlet_class.getText());
//                }
//            }
//        }

    }

    @Test
    public void show() throws Exception {
        
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("web.xml"));
        String servlet_name = null;
        
        System.out.println("请输入一个路径字符串:");
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();

        Element root = document.getRootElement();
        List<Element> mappings = root.elements("servlet-mapping");
        for (Element element : mappings) {
            System.out.println(element);
            List<Element> urls = element.elements("url-pattern");
            for (Element url : urls) {
                System.out.println(url);
                String text=url.getText();
                System.out.println(text);
                if(text.equals(str)) {
                    Element name=element.element("servlet-name");
                    servlet_name=name.getText();
                    System.out.println(servlet_name);
                }
            }
        }
        System.out.println("===========================================================================");
        //准备检索servlet
        List<Element> servlets=root.elements("servlet");
        for(Element servlet:servlets) {
            System.out.println(servlet);
            List<Element> servlet_names=servlet.elements("servlet-name");
            for(Element servlet_n:servlet_names) {
                String servlet_name1=servlet_n.getText();
                System.out.println(servlet_name1);
                if(servlet_name1.equals(servlet_name)) {
                    Element servlet_class=servlet.element("servlet-class");
                    System.out.println("需要查找的类的名称是: "+servlet_class.getText());
                }
            }
        }
        
    }
}

 属性值的解析

package com.swift.kaoshi;

import java.io.File;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/*有product.xml,请使用dom4j解析出所有的商品信息,并打印商品的所有属性值:
product.xml的内容如下:
<?xml version = “1.0” encoding=”UTF-8”?>
<products>
    <product id = “p001”>
        <name>华为X80</name>
        <color>白</color>
        <price>2800</price>
    </product>
    <product id = “p002”>
        <name>华为X88</name>
        <color>黑</color>
        <price>2900</price>
    </product>
</products>

操作步骤描述
1.在项目目录下,按照已给出的XML内容创建product.xml文件
2.使用核心类SaxReader加载xml文档获得Document
3.通过Document对象获得文档的根元素
4.获得所有product元素
5.获得元素属性的属性值及元素下的子元素的所有文本内容*/

public class Dom4j_Attribute {

    public static void main(String[] args) throws Exception {

        SAXReader sax = new SAXReader();
        Document document = sax.read(new File("product.xml"));
        Element root = document.getRootElement();
        List<Element> products = root.elements("product");
        for (Element product : products) {
            Attribute attri = product.attribute("id");
            System.out.println("product "+attri.getName()+"的属性值是 "+attri.getData());
            List<Element> dazahui=product.elements();
            for(Element za:dazahui) {
                String name=za.getName();
                String text=za.getText();
                System.out.println(name+" 元素的值为 "+text);
            }
        }

    }

}