首页 后端开发 XML/RSS教程 java Domj4读取xml文件

java Domj4读取xml文件

Feb 16, 2017 pm 03:40 PM

先概括,再以代码形式给出。


                   获取节点:

                         Iterator  Element.nodeIterator();  //获取当前标签节点下的所有子节点

 

                   获取 标签:

                           Element Document.getRootElement();  //获取xml文档的根标签      

                          Element  ELement.element("标签名") //指定名称的第一个子标签

                           IteratorElement.elementIterator("标签名");// 指定名称的所有子标签

                              List  Element.elements(); //获取所有子标签

                             

                    获取属性:

                         String   Element.attributeValue("属性名") //获取指定名称的属性值

                          Attribute   Element.attribute("属性名");//获取指定名称的属性对象

                                   Attribute.getName()  //获取属性名称

                                   Attibute.getValue()  //获取属性值

                         List     Element.attributes();  //获取所有属性对象.推荐使用方案。

                         Iterator      Element.attibuteIterator(); //获取所有属性对象

 

                    获取文本:

                              Element.getText();  //获取当前标签的文本

                              Element.elementText("标签名")//获取当前标签的指定名称的子标签的文本内容

案例:


import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

/**
 * 第二个dom4j读取xml文件内容
 * 节点
 * 标签
 * 属性
 * 文本
 * @author APPle
 *
 */
public class Demo2 {
	
	/**
	 * 得到节点信息
	 */
	@Test
	public void test1() throws Exception{
		//1.读取xml文档,返回Document对象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//2.nodeIterator: 得到当前节点下的所有子节点对象(【不包含孙以下的节点】)
		Iterator<Node> it = doc.nodeIterator();//返回的是一个迭代器对象,迭代器里面存放的就是Node,给出泛型为Node
		while(it.hasNext()){//判断是否有下一个元素
			Node node = it.next();//取出元素
			String name = node.getName();//得到节点名称
			//System.out.println(name);
			
			//System.out.println(node.getClass());
			//继续取出其下面的子节点
			//只有【标签节点】才有子节点
			//判断当前节点是否是标签节点
			if(node instanceof Element){
				Element elem = (Element)node;//node是Node类型的,因此要向下转型
				Iterator<Node> it2 = elem.nodeIterator();
				while(it2.hasNext()){
					Node n2 = it2.next();
					System.out.println(n2.getName());
				}
			}
		}
	}
	
	/**
	 * 遍历xml文档的所有节点
	 * @throws Exception
	 */
	@Test
	public void test2() throws Exception{
		//1.读取xml文档,返回Document对象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//得到根标签。contactList
		Element rooElem = doc.getRootElement();
		
		getChildNodes(rooElem);

	}
	
	/**
	 * 获取 传入的标签下的所有子节点。Element elem只有Element标签才有子节点
	 * @param elem
	 */
	private void getChildNodes(Element elem){
		System.out.println(elem.getName());//获取到了根标签的名称
		
		//得到子节点
		Iterator<Node> it = elem.nodeIterator();
		while(it.hasNext()){
			Node node = it.next();
			
			//1.判断是否是标签节点
			if(node instanceof Element){
				Element el = (Element)node;
				//递归
				getChildNodes(el);
			}
		};
	}
	
	/**
	 * 获取标签
	 */
	@Test
	public void test3() throws Exception{
		//1.读取xml文档,返回Document对象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//2.得到根标签
		Element  rootElem = doc.getRootElement();
		//得到标签名称
		String name = rootElem.getName();
		System.out.println(name);//contactList
		
		//3.得到当前标签下指定名称的【第一个】【子】标签
		
		/*Element contactElem = rootElem.element("contact");
		System.out.println(contactElem.getName());*/
		
		
		//4.得到当前标签下指定名称的所有子标签,指定了contact名称,就得到这个名称的所有同名的标签
		//这里制定了名称,有局限性
		/*Iterator<Element> it = rootElem.elementIterator("contact");
		while(it.hasNext()){
			Element elem = it.next();
			System.out.println(elem.getName());
		}*/
		
		
		//5.得到当前rootElem标签下的的所有子标签对象,这里会拿出所有子标签对象。推荐使用。
		List<Element> list = rootElem.elements();
		//遍历List的方法
		//1)传统for循环  2)增强for循环 3)迭代器
		/*for(int i=0;i<list.size();i++){
			Element e = list.get(i);
			System.out.println(e.getName());
		}*/
		
		for(Element e:list){
			System.out.println(e.getName());
		}
		/*
		Iterator<Element> it = list.iterator(); //ctrl+2 松开 l
		while(it.hasNext()){
			Element elem = it.next();
			System.out.println(elem.getName());
		}*/
		
		//获取更深层次的标签(方法只能一层层地获取)
		Element nameElem = doc.getRootElement().
					element("contact").element("name");
		System.out.println(nameElem.getName());
		
	}
	
	/**
	 * 获取属性
	 */
	@Test
	public void test4() throws Exception{
		//1.读取xml文档,返回Document对象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("./src/contact.xml"));
		
		//获取属性:(先获得属性所在的标签对象,然后才能获取属性)
		//1.得到标签对象
		Element contactElem = doc.getRootElement().element("contact");
		//2.得到属性
		//2.1  得到指定名称的属性值
		/*
		String idValue = contactElem.attributeValue("id");
		System.out.println(idValue);
		*/
		
		//2.2 得到指定属性名称的属性对象Attribute
		/*Attribute idAttr = contactElem.attribute("id");
		//getName: 属性名称    getValue:属性值
		System.out.println(idAttr.getName() +"=" + idAttr.getValue());*/
		
		//2.3 得到【所有】属性对象,返回LIst集合。不需要知道属性名称和多少个属性
		/*List<Attribute> list = contactElem.attributes();//推荐使用方案
		//遍历属性
		for (Attribute attr : list) {
			System.out.println(attr.getName()+"="+attr.getValue());
		}*/
		
		//2.4 得到【所有属性】对象,返回迭代器
		Iterator<Attribute> it = contactElem.attributeIterator();
		while(it.hasNext()){
			Attribute attr = it.next();
			System.out.println(attr.getName()+"="+attr.getValue());
		}
		
	}
	
	/**
	 * 获取文本
	 */
	@Test
	public void test5() throws Exception{
		//1.读取xml文档,返回Document对象
		SAXReader reader = new SAXReader();
					
		Document doc = reader.read(new File("./src/contact.xml"));
		
		
		/**
		 * 注意: 空格和换行也是xml的内容
		 */
		String content = doc.getRootElement().getText();
		System.out.println(content);
		
		
		//获取文本(先获取标签对象,再获取标签上的文本)
		Element nameELem = 
			doc.getRootElement().element("contact").element("name");
		//1. 得到文本
		String text = nameELem.getText();
		System.out.println(text);
		
		//2. 得到指定子标签名的文本内容
		String text2 = 
			doc.getRootElement().element("contact").elementText("phone");
		System.out.println(text2);
		
	}
	
	
}



 以上就是java Domj4读取xml文件的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1600
276
使用iTunes标签创建播客RSS提要的完整指南 使用iTunes标签创建播客RSS提要的完整指南 Aug 11, 2025 pm 02:09 PM

创建包含正确iTunes标签的播客RSSfeed是确保节目可在ApplePodcasts等平台被发现和正确显示的关键;2.RSSfeed必须遵循RSS2.0规范并包含特定的iTunes标签,如、、、和;3.必须在标签中添加xmlns:itunes命名空间,并在频道级别和每集级别正确设置元数据;4.使用Buzzsprout、Captivate、Podbean等托管平台可自动生成合规的feed,避免手动编写XML出错;5.提交前需使用验证工具检查feed有效性,确保音频文件为MP3格式、使用绝对UR

使用XSLT参数创建动态转换 使用XSLT参数创建动态转换 Aug 17, 2025 am 09:16 AM

XSLT参数是通过外部传递值来实现动态转换的关键机制,1.使用声明参数并可设置默认值;2.从应用程序代码(如C#)通过XsltArgumentList等接口传入实际值;3.在模板中通过$paramName引用参数控制条件处理、本地化、数据过滤或输出格式;4.最佳实践包括使用有意义的名称、提供默认值、分组相关参数并进行值验证。合理使用参数可使XSLT样式表具备高复用性和可维护性,相同样式表能根据不同输入产生多样化输出结果。

显示带有图像和媒体外壳的RSS提要项目 显示带有图像和媒体外壳的RSS提要项目 Aug 01, 2025 am 12:33 AM

首先检查RSS项的description字段中的内联图片,通过解析HTML或CDATA内容提取img标签作为主要图像来源;2.其次查找MediaRSS扩展中的media:thumbnail元素,优先使用其提供的缩略图用于预览展示;3.若前两者不存在,则检查enclosure标签的MIME类型是否为图像(如image/jpeg),将其作为备选封面图;4.对于音频或视频媒体,根据enclosure的MIME类型(如audio/mpeg或video/mp4)渲染对应的音频或视频播放器;5.实际实现时应

XML数据与Java中的蓖麻结合 XML数据与Java中的蓖麻结合 Aug 15, 2025 am 03:43 AM

CastorenablesXML-to-Javaobjectmappingviadefaultconventionsorexplicitmappingfiles;1)DefineJavaclasseswithgetters/setters;2)UseUnmarshallertoconvertXMLtoobjects;3)UseMarshallertoserializeobjectsbacktoXML;4)Forcomplexcases,configurefieldmappingsinmappin

.NET中的XML序列化和避免 .NET中的XML序列化和避免 Aug 13, 2025 am 05:10 AM

XMLserializationin.NETconvertsobjectstoXMLformatusingXmlSerializer,anddeserializationreconstructsobjectsfromXML.1.UseXmlSerializertoserializepublicpropertiesandfields,asshownwiththePersonclass.2.DeserializebycallingDeserializemethodonXmlSerializer,pa

RSS feed的解剖学:基本标签解释了 RSS feed的解剖学:基本标签解释了 Aug 07, 2025 am 12:46 AM

anrssfeedStructuredsistArdizedxmlTagStoDEliverContentUpDatesReliably.1.ThetAgisTherOtContainer,定义(例如,“ 2.0”)。2。InSideIt,inSideIt,thetagactsassassassassasthemainhub,holdingMetAdataTaTaAtaNAndAtaTaAtaNAndAtaTaTaAnAndContent.3.CoremetAdeAncluly.3.CoremetAdAtainCludAncludAncludAncludAncludAck,,, ,, ,, ,,.

评论和记录XML文件的最佳实践 评论和记录XML文件的最佳实践 Aug 17, 2025 am 01:52 AM

明确答案是:XML文件注释与文档的最佳实践包括使用有上下文的注释、结合外部文档、保持注释更新、避免过度注释、保持注释风格一致、为配置值添加单位和范围说明、必要时使用CDATA。1.注释应解释结构背后的原因而非仅仅描述内容,例如说明业务规则或技术限制;2.结合XSD、DTD或README等外部文档说明整体结构,并在根元素中引用schema以支持验证;3.每次修改XML时同步更新注释,避免遗留过时信息;4.仅在非显而易见处添加注释,避免对明显元素重复说明;5.团队统一注释位置、格式和关键词(如TOD

在JavaScript中获取和解析RSS feed 在JavaScript中获取和解析RSS feed Aug 04, 2025 am 03:08 AM

要解决JavaScript中获取和解析RSSfeed的问题,必须使用代理绕过CORS限制并用DOMParser解析XML。1.由于浏览器的跨源策略,无法直接通过fetch获取无CORS头的RSSfeed;2.解决方案是使用CORS代理,测试时可用公共代理如allorigins.win;3.生产环境应使用自建后端代理转发请求;4.获取XML文本后,使用DOMParser将其解析为XML文档对象;5.利用querySelectorAll和querySelector提取item中的标题、链接、发布时间

See all articles