`
y8820960
  • 浏览: 115760 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

遍历所有xml节点

    博客分类:
  • XML
xml 
阅读更多
package com.huawei.entity;

/** 
* xml节点数据结构 
*/
public class Leaf
{
    // 节点属性
    private String xattribute;
    
    // 节点PATH
    private String xpath;
    
    // 节点值
    private String value;
    
    public Leaf(String xattribute, String xpath, String value)
    {
        this.xattribute = xattribute;
        this.xpath = xpath;
        this.value = value;
    }
    
    public String getXpath()
    {
        return xpath;
    }
    
    public void setXpath(String xpath)
    {
        this.xpath = xpath;
    }
    
    public String getValue()
    {
        return value;
    }
    
    public void setValue(String value)
    {
        this.value = value;
    }
    
    public String getXattribute()
    {
        return xattribute;
    }
    
    public void setXattribute(String xattribute)
    {
        this.xattribute = xattribute;
    }
}

===================
package com.huawei.utils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultAttribute;

import com.huawei.entity.Leaf;

public class ParseXML
{
    //存储xml元素信息的容器 
    private static ArrayList<Leaf> elemList = new ArrayList<Leaf>();
    
    public static void main(String args[])
        throws DocumentException
    {
    	ParseXML test = new ParseXML();
        String path = "D:/4Tools/crm.xml";
        // 读取XML文件
        SAXReader reader = new SAXReader();
        Document doc = reader.read(path);
        // 获取XML根元素
        Element root = doc.getRootElement();
        test.getElementList(root);
        String result = test.getListString();
        //去掉消息头
        result = result.replace("/soapenv:Envelope/soapenv:Header", "");
        //去掉前缀消息体
        result = result.replace("/soapenv:Envelope/soapenv:Body/", "");
        result = result.replace("/","." );
        result = result.replace("", "");
        WriteReslut wr = new WriteReslut();
        wr.outputResult("D:/4Tools/", "result.txt", result);
        System.out.println("-----------解析结果------------\n" + result);
    }
    /** 
     * 获取节点所有属性值
     */
    @SuppressWarnings("unchecked")
	public String getNoteAttribute(Element element)
    {
        String xattribute = "";
        DefaultAttribute e = null;
        List list = element.attributes();
        for (int i = 0; i < list.size(); i++)
        {
            e = (DefaultAttribute)list.get(i);
            //System.out.println("name = " + e.getName() + ", value = " + e.getText());
            xattribute += " [name = " + e.getName() + ", value = " + e.getText() + "]";
        }
        return xattribute;
    }
    
    /** 
     * 递归遍历方法 
     * <功能详细描述>
     * @param element
     * @see [类、类#方法、类#成员]
     */
    @SuppressWarnings("unchecked")
	public void getElementList(Element element)
    {
        List elements = element.elements();
        // 没有子元素 
        if (elements.isEmpty())
        {
            String xpath = element.getPath();
            String value = element.getTextTrim();
            elemList.add(new Leaf(getNoteAttribute(element), xpath, value));
        }
        else
        {
            // 有子元素
            Iterator it = elements.iterator();
            while (it.hasNext())
            {
                Element elem = (Element)it.next();
                // 递归遍历 
                getElementList(elem);
            }
        }
    }
    
    @SuppressWarnings("unchecked")
	public String getListString()
    {
        StringBuffer sb = new StringBuffer();
        for (Iterator it = elemList.iterator(); it.hasNext();)
        {
            Leaf leaf = (Leaf)it.next();
            sb.append(leaf.getXpath());
            if (!"".equals(leaf.getXattribute()))
            {
                sb.append(", Attribute: ").append(leaf.getXattribute());
            }
            sb.append("\n");
        }
        return sb.toString();
    }
}

=========
package com.huawei.utils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class WriteReslut 
{
	//输出流
	BufferedWriter bw;
	
	public void outputResult(String path,String name,String content)
	{
		File file = new File(path + name);
		try {
			bw = new BufferedWriter(new FileWriter(file));
			bw.write(content);
			bw.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally
		{
			try {
				bw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

======
package com.huawei.utils;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

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

public class GUI {
	private String filePath;
	private File srcFile;
	private JFrame jFrame = null;
	private JButton choseButton = null;
	private JButton computeButton = null;
	private JTextField jtf = null;
	private JLabel la = null;
	private JFileChooser jfc = null;

	private ButtonListener buttLis = new ButtonListener();

	public void Frame() {
		jFrame = new JFrame("分析报文节点");
		jFrame.setLayout(new FlowLayout());
		jtf = new JTextField(15);
		choseButton = new JButton("选择");
		computeButton = new JButton("分析节点");
		la = new JLabel("请选择文件路径:");
		jfc = new JFileChooser();
		jfc.setCurrentDirectory(new File("D:\\"));
		jfc.setDialogTitle("选择文件");
		jfc.setDragEnabled(false);

		//添加控件
		jFrame.add(la);
		jFrame.add(jtf);
		jFrame.add(choseButton);
		jFrame.add(computeButton);
		choseButton.addActionListener(buttLis);
		computeButton.addActionListener(buttLis);

		//设置
		jFrame.setBounds(250, 200, 600, 350);//frame初始显示位置
		jFrame.setSize(400, 100);
		jFrame.setVisible(true);
		jFrame.setResizable(false);//将frame设置成不能改变大小
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	/**
	 * main	函数
	 */
	public static void main(String[] args) {
		GUI gui = new GUI();
		gui.Frame();
	}

	/**
	 * 监听类
	 */
	class ButtonListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent event) {
			// TODO Auto-generated method stub
			if (event.getSource().equals(choseButton)) {
				// 设置其只能选择文件
				jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
				int state = jfc.showOpenDialog(null);
				if (state == 1) {
					return;
				} else {
					srcFile = jfc.getSelectedFile();
					jtf.setText(srcFile.getAbsolutePath());
					filePath = srcFile.getPath();
				}
			} else {
				if (filePath == null) {
					JOptionPane.showMessageDialog(jFrame, "请先选择文件");
				} else {
					ParseXML test = new ParseXML();
					// 读取XML文件
					SAXReader reader = new SAXReader();
					Document doc;
					try {
						doc = reader.read(filePath);
						// 获取XML根元素
						Element root = doc.getRootElement();
						test.getElementList(root);
						String result = test.getListString();
						//去掉消息头
						result = result.replace(
								"/soapenv:Envelope/soapenv:Header", "");
						//去掉前缀消息体
						result = result.replace(
								"/soapenv:Envelope/soapenv:Body/", "");
						result = result.replace("/", ".");
						result = result.replace("", "");
						WriteReslut wr = new WriteReslut();
						wr.outputResult(
								filePath.replace(srcFile.getName(), ""),
								"分析结果.txt", result);
						JOptionPane.showMessageDialog(jFrame, "分析完毕!");
					} catch (DocumentException e) 
					{
						// TODO Auto-generated catch block
						JOptionPane.showMessageDialog(jFrame, e);
					}
				}

			}
		}

	}
}

分享到:
评论

相关推荐

    dom遍历所有xml节点,并且重新生成xml

    // 遍历XML节点 function traverseNode(node) { // 处理当前节点 console.log('Node Type:', node.nodeType); console.log('Node Name:', node.nodeName); console.log('Attributes:', Array.from(node....

    遍历XML文件内所有节点和属性

    针对这一问题,"遍历XML文件内所有节点和属性"的非递归方法应运而生。 在描述中提到的“比递归调用的速度要快很多”,这通常是指通过迭代而非递归的方式遍历XML文档。递归方法会为每个节点创建新的函数调用栈,而当...

    qt xml操作 遍历

    - 遍历XML节点:通过调用readNext()方法,每次移动到下一个节点。根据readNext()返回的QXmlStreamTokenType枚举值,可以判断当前节点的类型,如StartElement、EndElement、Characters等。 - 获取节点信息:在遍历...

    jQuery 1.5 遍历xml节点属性

    在jQuery 1.5中,遍历XML节点属性主要通过以下方法实现: 1. **jQuery.parseXML()**:这是jQuery提供的一个静态方法,用于将XML字符串解析为DOM对象。例如: ```javascript var xmlString = "&lt;root&gt;&lt;node attr1='...

    Qt实现xml文件内容的遍历读出

    总结来说,这个项目演示了如何利用Qt的QDomDocument类处理XML文件,通过递归函数遍历XML树,并使用虚函数实现多态性,为不同类型的XML节点提供灵活的处理策略。这不仅教会我们XML解析的基本技术,还展示了面向对象...

    XmlDocument 节点遍历C#

    本篇文章将详细讲解如何利用C#中的`XmlDocument`类遍历XML文档的所有节点,包括节点名称、类型以及其属性。 首先,我们需要了解XML文档的基本结构,XML文档由元素(Element)、属性(Attribute)、文本(Text)等...

    python xml.etree.ElementTree遍历xml所有节点实例详解

    python xml.etree.ElementTree遍历xml所有节点 XML文件内容: 代码: #-*- coding: UTF-8 -*- # 从文件中读取数据 import xml.etree.ElementTree as ET #全局唯一标识 unique_id = 1 #遍历所有的节点

    C# LinqXML遍历指定节点下的所有对象

    下面是一个基本示例,展示了如何遍历XML文档中指定节点的所有子元素: ```csharp using System; using System.Linq; using System.Xml.Linq; public class Program { public static void Main() { string xml...

    Q694896 问答问题的回答 C#遍历XML文件节点内容

    本篇文章将深入探讨如何使用C#来遍历XML文件中的各个节点内容。 首先,要遍历XML文件,我们需要使用.NET Framework提供的System.Xml命名空间中的类。最常用的是XmlDocument和XmlNode,它们提供了读取和操作XML文档...

    jQuery实现遍历XML节点和属性的方法示例

    总体而言,本文通过实例详细介绍了如何使用jQuery和原生JavaScript技术遍历XML节点和属性,并通过AJAX技术加载XML数据,以及如何使用原生JavaScript处理不支持的属性集合。这些方法和技巧对于需要在Web页面上处理XML...

    c# 遍历xml文件

    给定以下XML结构文件(files.xml): &lt;FileSystem&gt; &lt; DriverC &gt; ”MSDOS622”&gt; ...&lt;/Dir&gt; ”MSDOS.SYS” &gt;&lt;/File&gt; ” IO.SYS” &gt;&lt;/File&gt; &lt;/DriverC&gt; ...可以考虑使用路径递归遍历技术XML子节点信息。

    xml文件的读取,遍历每个子节点,已经节点中的数据设置。

    2. **遍历XML节点**:DOM树由一系列的节点组成,包括元素节点、文本节点、属性节点等。我们可以使用QDomNodeList和QDomNode类来遍历这些节点。从根节点开始,逐层深入到每个子节点。 ```cpp QDomElement root = doc...

    遍历网页中的节点 js+html

    6. 遍历子节点:对于获取的节点,我们还可以通过`childNodes`属性来获取其所有子节点,`children`属性则只返回元素子节点。`firstChild`和`lastChild`属性分别指向第一个和最后一个子节点,`nextSibling`和`...

    vc cmarkup 遍历 xml 树

    在本实例中,我们关注的是“vc cmarkup 遍历 xml 树”,这表明我们将讨论如何在Visual C++(VC6)中使用CMARKUP类来解析并遍历XML树结构。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准...

    利用递归方式遍历XML文件

    在遍历XML文件时,我们可以定义一个函数,这个函数接收一个XML元素作为参数,然后处理该元素并递归地处理它的所有子元素。 三、Python中的递归XML遍历 在Python中,我们可以使用`xml.etree.ElementTree`库来解析和...

    操作XMLHelper遍历节点

    最近开发用到了XML配置参数,比起Config方便很多,晚上整理了一下代码,给大家做了个Demo分享一下 1、自动添加多级子节点,如果存在则在后面增加Element 2、自动删除任意子节点及... 6、自动生成XML文件及root节点

    wpf遍历xml文件

    2. **遍历XML节点**:`XDocument` 提供了`Descendants()` 方法,可以用来遍历XML文档中的所有后代节点。假设我们要查找包含特定值的节点,我们可以这样做: ```csharp string targetValue = "your_value_to_search...

Global site tag (gtag.js) - Google Analytics