解析XML

XML解析方式

XML总共有4种解析方式

依赖

		<!--解析XMl-->
        <module>analysisXml-09</module>
        <module>spring-01</module>
    </modules>
			<!--jdom -->
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!-- dom4j -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

1.DOM解析

//用Element方式
public static void element(NodeList list) {
    for (int i = 0; i < list.getLength(); i++) {
        Element element = (Element) list.item(i);
        NodeList childNodes = element.getChildNodes();
        for (int j = 0; j < childNodes.getLength(); j++) {
            if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
                //获取节点
                System.out.print(childNodes.item(j).getNodeName() + ":");
                //获取节点值
                System.out.println(childNodes.item(j).getFirstChild().getNodeValue());
            }
        }
    }
}
public static void node(NodeList list){
    for (int i = 0; i <list.getLength() ; i++) {
        Node node = list.item(i);
        NodeList childNodes = node.getChildNodes();
        for (int j = 0; j <childNodes.getLength() ; j++) {
            if (childNodes.item(j).getNodeType()==Node.ELEMENT_NODE) {
                System.out.print(childNodes.item(j).getNodeName() + ":");
                System.out.println(childNodes.item(j).getFirstChild().getNodeValue());
            }
        }
    }
}
public static void main(String[] args) {
    //1.创建DocumentBuilderFactory对象
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    //2.创建DocumentBuilder对象
    try {
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document d = builder.parse("D:\\code\\Mybatis-Study\\mybatis-09\\src\\main\\resources\\Student.xml");
        NodeList sList = d.getElementsByTagName("student");
        element(sList);
        //node(sList);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2、SAX解析

public class SAXDemoHandel extends DefaultHandler {
    //遍历xml文件开始标签
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        System.out.println("sax解析开始");
    }

    //遍历xml文件结束标签
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        System.out.println("sax解析结束");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        if (qName.equals("student")){
            System.out.println("============开始遍历student=============");
            //System.out.println(attributes.getValue("rollno"));
        }
        else if (!qName.equals("student")&&!qName.equals("class")){
            System.out.print("节点名称:"+qName+"----");
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if (qName.equals("student")){
            System.out.println(qName+"遍历结束");
            System.out.println("============结束遍历student=============");
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException, SAXException {
        super.characters(ch, start, length);
        String value = new String(ch,start,length).trim();
        if (!value.equals("")) {
            System.out.println(value);
        }
    }
public static void main(String[] args) throws Exception {
    //1.或去SAXParserFactory实例
    SAXParserFactory factory = SAXParserFactory.newInstance();
    //2.获取SAXparser实例
    SAXParser saxParser = factory.newSAXParser();
    //创建Handel对象
    SAXDemoHandel handel = new SAXDemoHandel();
    saxParser.parse("D:\\code\\Mybatis-Study\\mybatis-09\\src\\main\\resources\\Student.xml",handel);
}

3、DOM4j解析

public static void main(String[] args) throws Exception {
    //1.创建Reader对象
    SAXReader reader = new SAXReader();
    //2.加载xml
    Document document = reader.read(new File("D:\\code\\Mybatis-Study\\mybatis-09\\src\\main\\resources\\Student.xml "));
    //3.获取根节点
    Element rootElement = document.getRootElement();
    Iterator iterator = rootElement.elementIterator();
    while (iterator.hasNext()) {
        Element stu = (Element) iterator.next();
        List<Attribute> attributes = stu.attributes();
        System.out.println("======获取属性值======");
        for (Attribute attribute : attributes) {
            System.out.println(attribute.getValue());
        }
        System.out.println("======遍历子节点======");
        Iterator iterator1 = stu.elementIterator();
        while (iterator1.hasNext()) {
            Element stuChild = (Element) iterator1.next();
            System.out.println("节点名:" + stuChild.getName() + "---节点值:" + stuChild.getStringValue());
        }
    }
}

4、jDOM解析

public static void main(String[] args) throws Exception {
    //1.创建SAXBuilder对象
    SAXBuilder saxBuilder = new SAXBuilder();
    //2.创建输入流
    InputStream is = new FileInputStream(new File("D:\\code\\Mybatis-Study\\mybatis-09\\src\\main\\resources\\Student.xml"));
    //3.将输入流加载到build中
    Document document = saxBuilder.build(is);
    //4.获取根节点
    Element rootElement = document.getRootElement();
    //5.获取子节点
    List<Element> children = rootElement.getChildren();
    for (Element child : children) {
        System.out.println("通过rollno获取属性值:"+child.getAttribute("rollno"));
        List<Attribute> attributes = child.getAttributes();
        //打印属性
        for (Attribute attr : attributes) {
            System.out.println(attr.getName()+":"+attr.getValue());
        }
        List<Element> childrenList = child.getChildren();
        System.out.println("======获取子节点-start======");
        for (Element o : childrenList) {
            System.out.println("节点名:"+o.getName()+"---"+"节点值:"+o.getValue());
        }
        System.out.println("======获取子节点-end======");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊跃龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值