用递归方法解析XML

package test;


import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


import javax.swing.RootPaneContainer;


import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;


public class xml {
public static void main(String[] args) throws Exception {
String xml = "<?xml version='1.0' encoding='GBK'?><message finishTime='2012-12-18 12:03:06'><request func='car_pay_sync' return='true'><content><orderInfo><insuranceApplicantNo>TDDK201233019102001557</insuranceApplicantNo ><paymentNo>123456</paymentNo><paymentTime>2012-12-1812:03:06</paymentTime><payTime>2012-12-18 12:03:06</payTime><payType>快钱POS </payType><utmsn>123456</utmsn></orderInfo></content></request></message>";
Map<String, Object> map = new HashMap<String,Object>();
//读取xml转换的字符串
Document document = DocumentHelper.parseText(xml);
Element root=document.getRootElement();//获取根节点  
getNodes(root);//从根节点开始遍历所有节点  
}
public static void getNodes(Element node){  
   System.out.println("--------------------");        
   //当前节点的名称、文本内容和属性  
   System.out.println("当前节点名称:"+node.getName());//当前节点名称  
   System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称  
   List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list  
   for(Attribute attr:listAttr){//遍历当前节点的所有属性  
       String name=attr.getName();//属性名称  
       String value=attr.getValue();//属性的值  
       System.out.println("属性名称:"+name+"属性值:"+value);  
   }  
   //递归遍历当前节点所有的子节点  
   List<Element> listElement=node.elements();//所有一级子节点的list  
   for(Element e:listElement){//遍历所有一级子节点  
       getNodes(e);//递归  
   }  
}  

}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例,使用QTreewidget显示归显示多层XML: ```c++ #include <QXmlStreamReader> #include <QTreeWidgetItem> #include <QFile> #include <QTreeWidget> #include <QApplication> void parseXml(QXmlStreamReader& xmlReader, QTreeWidgetItem* parentItem) { while (!xmlReader.atEnd()) { xmlReader.readNext(); if (xmlReader.isStartElement()) { QTreeWidgetItem* item = new QTreeWidgetItem(parentItem); item->setText(0, xmlReader.name().toString()); QXmlStreamAttributes attributes = xmlReader.attributes(); for (const QXmlStreamAttribute& attribute : attributes) { QTreeWidgetItem* attributeItem = new QTreeWidgetItem(item); attributeItem->setText(0, attribute.name().toString()); attributeItem->setText(1, attribute.value().toString()); } parseXml(xmlReader, item); } if (xmlReader.isEndElement()) return; } } int main(int argc, char *argv[]) { QApplication app(argc, argv); QFile file("example.xml"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return -1; QXmlStreamReader xmlReader(&file); QTreeWidget* treeWidget = new QTreeWidget(); treeWidget->setColumnCount(2); treeWidget->setHeaderLabels({"Name", "Value"}); parseXml(xmlReader, treeWidget->invisibleRootItem()); treeWidget->show(); return app.exec(); } ``` 这个示例会读取一个名为example.xmlXML文件,并将其显示在一个QTreewidget中。每个XML元素都是一个树形结构的节点,每个属性都是该元素的子节点。此示例解析XML,以处理多层嵌套的元素。 请注意,此示例为QTreewidget添加了第二列,以显示元素的值。但是,如果XML文件中没有包含元素的值,则该列将为空。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值