dom树打印

本文介绍了一个使用Java实现的XML解析示例,通过DOM方式解析并打印XML文件的内容。该示例利用了Apache Xerces库进行解析,并展示了如何遍历XML文档树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package demo;
import org.apache.xerces.parsers.DOMParser;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlDomDemo
{
    @Test
    public void test()
    {
        String url = "conf/test/dispatcher-config.xml";
        parseAndPrint(url);
    }
    
    public void parseAndPrint(String uri)
    {
        Document doc = null;
        try
        {
            DOMParser parser = new DOMParser();
            parser.parse(uri);
            doc = parser.getDocument();
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (doc != null)
            printDomTree(doc);
        
    }
    
    public void printDomTree(Node node)
    {
        int type = node.getNodeType();
        switch (type)
        {
            case Node.DOCUMENT_NODE:// document类型
                System.out.println("<?xml version=\"1.0\" ?>");
                printDomTree(((Document)node).getDocumentElement());
                break;
            case Node.ELEMENT_NODE:// 元素类型
                System.out.print("<");
                System.out.print(node.getNodeName());
                NamedNodeMap attrs = node.getAttributes();
                for (int i = 0; i < attrs.getLength(); i++)
                {
                    Node attr = attrs.item(i);
                    System.out.print(" " + attr.getNodeName() + "=\"" + attr.getNodeValue() + "\"");
                }
                System.out.print(">");
                NodeList children = node.getChildNodes();
                if (children != null)
                {
                    int len = children.getLength();
                    for (int i = 0; i < len; i++)
                        printDomTree(children.item(i));
                }
                break;
            case Node.ENTITY_REFERENCE_NODE:
                System.out.print("&");
                System.out.print(node.getNodeName());
                System.out.print(";");
                break;
            case Node.CDATA_SECTION_NODE:
                System.out.print("<![CDATA[");
                System.out.print(node.getNodeValue());
                System.out.print("]]>");
                break;
            case Node.TEXT_NODE:
                System.out.print(node.getNodeValue());
                break;
            case Node.PROCESSING_INSTRUCTION_NODE:
                System.out.print("<?");
                System.out.print(node.getNodeName());
                String data = node.getNodeValue();
                System.out.print(" ");
                System.out.print(data);
                System.out.print("?>");
                break;
        }
        if (type == Node.ELEMENT_NODE)
        {
            System.out.print("</");
            System.out.print(node.getNodeName());
            System.out.print(">");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值