xml 树状显示

xml文件树状显示,dom解析

效果如下:

test.xml
    |--students
       |--student
       |  |--name
       |  |  |--e
       |  |     |--g:ggggggg
       |  |--k
       |  |  |--m:mmmm
       |  |--a
       |  |  |--v:vvvvvvvvv
       |  |--c
       |  |  |--t
       |  |     |--as:asasas
       |  |--d:dddddd
       |  |--b:bbbb
       |  |--age:20
       |--student
          |--name:ls
          |--a:aaaa
          |--c:cccccc
          |--d:dddddd
          |--b:bbbb
          |--age:20


代码如下:

import javax.xml.parsers.*;

import org.w3c.dom.*;
import java.io.*;
public class TreeXml
{
     private    int []is=new int[20] ;
    
    public  void walkNode(Node node,int n)
    {
        NodeList nodeList=node.getChildNodes();
        int len=nodeList.getLength();
        is[n+1]=(len-1)/2;
        switch(node.getNodeType())
        {
            case Node.DOCUMENT_NODE:
                printName(node,n);
                nodeList=node.getChildNodes();
                n++;
                for(int i=0;i<nodeList.getLength();i++)
                    walkNode(nodeList.item(i),n);
                break;
            case Node.ELEMENT_NODE:
                nodeList=node.getChildNodes();
                if(nodeList.getLength()>1)
                {
                    printName(node,n);
                    n++;
                    for(int i=0;i<nodeList.getLength();i++)
                        walkNode(nodeList.item(i),n);
                }
                else
                    printNameValue(node,n);
                break;
            default:break;
        }
        is[n]--;
        n--;
    }
    public void  printNameValue(Node node,int n)
    {
        for(int i=0;i<n;i++)
            System.out.print(is[i]>0?" | ":"   ");
        System.out.println(" |--"+node.getNodeName()+":"+node.getFirstChild().getNodeValue());
    }
    public void  printName(Node node,int n)
    {
        for(int i=0;i<n;i++)
            System.out.print(is[i]>0?" | ":"   ");
        System.out.println(" |--"+node.getNodeName());
    }
    public static void main(String[]args)
    {

        if(args.length<1)
        {
            System.out.println("参数错误!");
            System.exit(1);
        }
        System.out.println(args[0]);
        try
        {
            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            DocumentBuilder builder=factory.newDocumentBuilder();
            Document doc=builder.parse(new File(args[0]));
            new TreeXml().walkNode(doc.getDocumentElement(),1);
        }catch(Exception e)
        {
            System.out.println("错误"+e.getMessage());
        }
        System.exit(0);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例程序,演示如何读取XML文件并将其显示为QTreeWidget: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem from PyQt5.QtXml import QDomDocument class XmlViewer(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("XML Viewer") self.tree = QTreeWidget(self) self.setCentralWidget(self.tree) self.load_xml("example.xml") def load_xml(self, filename): with open(filename, "r") as file: xml_text = file.read() doc = QDomDocument() if doc.setContent(xml_text): self.parse_xml(doc) def parse_xml(self, node, tree_item=None): if tree_item is None: tree_item = QTreeWidgetItem(self.tree, [node.nodeName()]) for i in range(node.attributes().count()): attr = node.attributes().item(i) QTreeWidgetItem(tree_item, [attr.nodeName(), attr.nodeValue()]) for child_node in node.childNodes(): child_item = QTreeWidgetItem(tree_item, [child_node.nodeName()]) self.parse_xml(child_node, child_item) if __name__ == '__main__': app = QApplication(sys.argv) viewer = XmlViewer() viewer.show() sys.exit(app.exec_()) ``` 在这个示例程序中,我们首先定义了一个`XmlViewer`类,它是一个继承自`QMainWindow`的窗口类。在`__init__`函数中,我们创建了一个`QTreeWidget`作为中心窗口组件,并调用`load_xml`函数来加载XML文件。 `load_xml`函数读取XML文件的文本内容,并使用`QDomDocument`类将其解析为一个树形结构。如果解析成功,我们调用`parse_xml`函数来遍历树形结构,并将其添加到`QTreeWidget`中。 `parse_xml`函数接受一个`QDomNode`对象作为输入,该对象表示XML树的一个节点。我们首先创建一个`QTreeWidgetItem`,它表示树形结构中的一个节点,并将其添加到父节点中。然后,我们遍历该节点的所有属性,并将它们添加到树形结构中。最后,我们遍历该节点的所有子节点,并调用`parse_xml`函数来递归地处理它们。 在`__main__`函数中,我们创建了一个`QApplication`对象和一个`XmlViewer`对象,并将其显示出来。当应用程序退出时,我们调用`sys.exit`函数来退出应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值