`
Aclik
  • 浏览: 16085 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java解析XML文件,获取每个节点的值

    博客分类:
  • Java
 
阅读更多

①解析XML文件的工具类

 

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ResolveXML {

	/**
	 * 
	 * @param path XML配置路径
	 * @param type 证件类型
	 * @param headNode XML节点名称
	 * @param street 所属镇街
	 */
	public static List<String> getXMLValue(String path, String type,String headNode,String street) {
		File file = new File(path);
		DocumentBuilder db = null;
		List<String> resultList = new ArrayList<String>();
		DocumentBuilderFactory dbf = null;
		Element element = null;
		int index = 0;
		List<String> xmlNode = getXMLNode(path, type, headNode,street);
		try {
			dbf = DocumentBuilderFactory.newInstance();// 返回documentBuilderFactory对象
			db = dbf.newDocumentBuilder();// 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象
			Document dt = db.parse(file);// 得到一个DOM并返回给document对象
			element = dt.getDocumentElement();// 得到一个elment根元素
			//System.out.println("根元素:" + element.getNodeName());// 获得根节点
			NodeList childNodes = element.getChildNodes();// 获得根元素下的子节点
			// 遍历这些子节点
			for (int i = 0; i < childNodes.getLength(); i++) {
				// 获得每个对应位置i的结点
				Node node1 = childNodes.item(i);
				if (headNode.equals(node1.getNodeName())) {
					// 如果节点的名称为"Account",则输出Account元素属性type
					// System.out.println(node1.getAttributes().getNamedItem("type").getNodeValue());
					String typeNodeVal = node1.getAttributes().getNamedItem("type").getNodeValue();
					if (type.equals(typeNodeVal)) {
						NodeList nodeDetail = node1.getChildNodes();// 获得<Account>下的节点
						// 遍历<Account>下的节点
						for (int j = 0; j < nodeDetail.getLength(); j++) {
							// 获得<Account>元素每一个节点
							Node detail = nodeDetail.item(j);
							if (xmlNode.get(index).equals(detail.getNodeName())) { // 输出money
								//System.out.println(detail.getTextContent());
								resultList.add(detail.getTextContent());
								if (index < xmlNode.size()) {
									index++;
									if (index == xmlNode.size()) {
										break;
									}
								}
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resultList;
	}
	
	/**
	 * 
	 * @param path
	 * @param type
	 * @param headNode
	 * @return
	 */
	public static List<String> getXMLNode(String path, String type,String headNode,String street) {
		File file = new File(path);// 可以使用绝对路劲
		String getNodeName ;
		DocumentBuilder db = null;// documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件)
		DocumentBuilderFactory dbf = null;
		Element element = null;
		List<String> nodes = new ArrayList<String>();
		try {
			dbf = DocumentBuilderFactory.newInstance();// 返回documentBuilderFactory对象
			db = dbf.newDocumentBuilder();
			Document dt = db.parse(file);
			element = dt.getDocumentElement();
			NodeList childNodes = element.getChildNodes();// 获得根元素下的子节点
			for (int i = 0; i < childNodes.getLength(); i++) {
				Node node1 = childNodes.item(i);
				if (headNode.equals(node1.getNodeName())) {
					String nodevalType = node1.getAttributes().getNamedItem("type").getNodeValue();// 子节点type属性值
					String nodevalStreet = node1.getAttributes().getNamedItem("street").getNodeValue();
					if (nodevalType.equals(type) && nodevalStreet.equals(street) ) {
						// 根据类型属性值不同的节点值
						NodeList nodeDetail = node1.getChildNodes();
						for (int j = 0; j < nodeDetail.getLength(); j++) {
							// 获得<Account>元素每一个节点,detail.getNodeName()
							Node detail = nodeDetail.item(j);
							getNodeName = detail.getNodeName();
							//System.out.println(getNodeName);
							if(getNodeName.startsWith("strongit-")){
								nodes.add(getNodeName);
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return nodes;
	}
	
}
②在项目的根目录创建languages.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Strongit>

    <!-- 子节点命名方式必须为:strongit-  -->
 	<Account type="type2" street="西樵镇">
  		<strongit-name>name</strongit-name>
  		<strongit-age>age</strongit-age>
  		<strongit-sex>sex</strongit-sex>
  		<strongit-addr>addr</strongit-addr>
	</Account>
	
</Strongit>
 ③调用解析XML的工具类
import java.util.List;

public class App {

	public static void main(String[] args) {
		
		 List<String> value = ResolveXML.getXMLValue("languages.xml", "type2", "Account","");
		 for(String result : value){
			 System.out.println(result);
		 }
	}

}
 ④显示结果
name age sex addr

 

 

分享到:
评论

相关推荐

    java 解析xml获取节点内容

    例如,如果有多个`&lt;item&gt;`节点,上面的循环会遍历每个节点,分别获取其子节点的值。 总结起来,不依赖任何额外的jar包,我们可以通过Java的标准库来解析XML文件并获取节点内容。这种方法适用于小规模的XML文件,...

    java 解析xml 多级

    对于每个元素节点,可以使用`getAttribute()`获取属性值,`getTextContent()`获取文本内容。 ```java String attrValue = element.getAttribute("属性名"); String text = element.getTextContent(); ``` 6. 处理...

    JAVA JAXB 解析XML嵌套子节点为字符串

    使用JAXB解析XML时,我们首先需要创建一个Java类模型,这个模型反映了XML文档的结构。每个XML元素对应一个Java类,类的属性对应元素的属性或子元素。例如,如果XML中有以下结构: ```xml &lt;text&gt;Some text here ...

    dom4j 解析(读取) xml 节点数据

    接下来,我们可以递归地遍历XML结构,访问每个元素节点及其属性: ```java void traverse(Element element) { // 访问元素的属性 for (Attribute attr : element.attributes()) { System.out.println("属性名: ...

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    java 解析XML性能对比分析Demo

    在"Java解析XML性能对比分析Demo"中,你可以通过运行这些解析器的示例代码,观察它们在处理相同XML文件时的内存占用、处理速度等指标,以了解哪种解析方式更适合你的项目需求。例如,如果你处理的XML文件较小,DOM或...

    解析XML的程序,可以读取节点属性。

    - `XmlFile.cpp`:通常包含XML解析器的实现代码,包括读取文件、解析XML结构、提取属性等功能。 - `XmlFile.h`:头文件,可能包含了类定义和相关的函数声明,供其他源文件引用以调用XML解析功能。 6. **扩展性**...

    Java解析XML文件的DOM和SAX方式.doc

    SAX(Simple API for XML)是一种基于事件的解析方式,在解析 XML 文件时,SAX 解析器会触发一系列事件,每个事件对应 XML 文档中的一个元素或属性。Java 中使用 SAX 方式解析 XML 文件需要实现一个事件处理器,来...

    java解析xml的四种经典方法

    Java解析XML的四种经典方法是XML处理中常用的技术,它们分别是DOM、SAX、StAX和JDOM。每种方法都有其独特的特性和适用场景,下面将详细介绍这四种方法。 1. DOM(Document Object Model)解析: DOM是W3C制定的一种...

    java 使用JDOM解析xml文件.docx

    接下来,需要定义一个 XML 文件,其中包含了 beans 节点,每个节点对应一个对象。 最后,需要编写一个主类,实现了 BeanFactory 接口,用于解析 XML 文件并获取对应的对象。ClassPathXmlApplicationContext 类使用 ...

    JAVA DOM解析XML文件过程详解

    接着,我们使用 Document 对象的 getElementsByTagName() 方法获取了所有的 book 节点,然后遍历每个 book 节点,获取其名称、值和类型,并获取其属性和子节点。 在实际应用中,DOM 解析 XML 文件的过程可以应用于...

    java解析XML的4种经典方法

    Java解析XML的四种经典方法主要涵盖DOM、SAX、StAX和JDOM这四种方式,每种方法都有其独特的优势和适用场景。 1)DOM(JAXP Crimson 解析器) DOM(Document Object Model)是W3C推荐的一种XML解析标准,它将XML...

    java_dom解析xml xml java

    标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到这是一个适合新手入门的内容,并给出了一个简单的XML示例。该XML文档包含了一个`...

    Java解析xml配置文件,DOM4J解析xml配置文件,提供使用文档和源码下载

    Java解析XML配置文件是开发过程中常见的一项任务,特别是在基于Java的框架中,如Spring,大量使用XML文件来存储配置信息。DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改...

    java解析xml动态生成树形菜单结构

    总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...

    java解析XML文件DOMO

    Java解析XML文件主要依赖于Java API中的DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析器。在本案例中,我们重点讨论DOM解析器,DOMO通常指的是DOM操作。DOM解析器...

    Java解析XML文件

    ### Java解析XML文件:DOM与SAX解析技术详解 #### DOM解析:JAXP与Crimson解析器 DOM(Document Object Model),即文档对象模型,是W3C为XML文档定义的一种标准接口,用于在各种编程语言中操作XML文档。DOM将XML...

    Java解析XML四种方式

    总结,Java解析XML的方式多样,每种都有其适用场景。理解这些方法的原理和优缺点,能够帮助开发者根据项目需求选择最佳实践。在实际工作中,可以结合使用这些解析技术,以实现更高效、更安全的XML处理。

    java 解析xml 并导入数据库(dom4j )

    通过解析XML文件`test01.xml`,获取每个需要导入的元素,然后批量执行数据库的插入操作。这只是一个基础示例,实际应用中可能需要根据具体需求进行调整,例如处理嵌套元素、处理属性和值的转换等。 总的来说,DOM4J...

    java dom 解析 xml 实例

    Java 中有多种方法可以解析 XML 文档,其中最常用的两种方法是使用基于事件的 XML 简单 API(Simple API for XML,SAX)和基于树和节点的文档对象模型(Document Object Model,DOM)。Sun 公司提供了 Java API for ...

Global site tag (gtag.js) - Google Analytics