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);
}
}
}
}
}
}
分享到:
相关推荐
// 遍历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节点:通过调用readNext()方法,每次移动到下一个节点。根据readNext()返回的QXmlStreamTokenType枚举值,可以判断当前节点的类型,如StartElement、EndElement、Characters等。 - 获取节点信息:在遍历...
在jQuery 1.5中,遍历XML节点属性主要通过以下方法实现: 1. **jQuery.parseXML()**:这是jQuery提供的一个静态方法,用于将XML字符串解析为DOM对象。例如: ```javascript var xmlString = "<root><node attr1='...
总结来说,这个项目演示了如何利用Qt的QDomDocument类处理XML文件,通过递归函数遍历XML树,并使用虚函数实现多态性,为不同类型的XML节点提供灵活的处理策略。这不仅教会我们XML解析的基本技术,还展示了面向对象...
本篇文章将详细讲解如何利用C#中的`XmlDocument`类遍历XML文档的所有节点,包括节点名称、类型以及其属性。 首先,我们需要了解XML文档的基本结构,XML文档由元素(Element)、属性(Attribute)、文本(Text)等...
python xml.etree.ElementTree遍历xml所有节点 XML文件内容: 代码: #-*- coding: UTF-8 -*- # 从文件中读取数据 import xml.etree.ElementTree as ET #全局唯一标识 unique_id = 1 #遍历所有的节点
下面是一个基本示例,展示了如何遍历XML文档中指定节点的所有子元素: ```csharp using System; using System.Linq; using System.Xml.Linq; public class Program { public static void Main() { string xml...
本篇文章将深入探讨如何使用C#来遍历XML文件中的各个节点内容。 首先,要遍历XML文件,我们需要使用.NET Framework提供的System.Xml命名空间中的类。最常用的是XmlDocument和XmlNode,它们提供了读取和操作XML文档...
总体而言,本文通过实例详细介绍了如何使用jQuery和原生JavaScript技术遍历XML节点和属性,并通过AJAX技术加载XML数据,以及如何使用原生JavaScript处理不支持的属性集合。这些方法和技巧对于需要在Web页面上处理XML...
给定以下XML结构文件(files.xml): <FileSystem> < DriverC > ”MSDOS622”> ...</Dir> ”MSDOS.SYS” ></File> ” IO.SYS” ></File> </DriverC> ...可以考虑使用路径递归遍历技术XML子节点信息。
2. **遍历XML节点**:DOM树由一系列的节点组成,包括元素节点、文本节点、属性节点等。我们可以使用QDomNodeList和QDomNode类来遍历这些节点。从根节点开始,逐层深入到每个子节点。 ```cpp QDomElement root = doc...
6. 遍历子节点:对于获取的节点,我们还可以通过`childNodes`属性来获取其所有子节点,`children`属性则只返回元素子节点。`firstChild`和`lastChild`属性分别指向第一个和最后一个子节点,`nextSibling`和`...
在本实例中,我们关注的是“vc cmarkup 遍历 xml 树”,这表明我们将讨论如何在Visual C++(VC6)中使用CMARKUP类来解析并遍历XML树结构。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准...
在遍历XML文件时,我们可以定义一个函数,这个函数接收一个XML元素作为参数,然后处理该元素并递归地处理它的所有子元素。 三、Python中的递归XML遍历 在Python中,我们可以使用`xml.etree.ElementTree`库来解析和...
最近开发用到了XML配置参数,比起Config方便很多,晚上整理了一下代码,给大家做了个Demo分享一下 1、自动添加多级子节点,如果存在则在后面增加Element 2、自动删除任意子节点及... 6、自动生成XML文件及root节点
2. **遍历XML节点**:`XDocument` 提供了`Descendants()` 方法,可以用来遍历XML文档中的所有后代节点。假设我们要查找包含特定值的节点,我们可以这样做: ```csharp string targetValue = "your_value_to_search...