JAXP和Dom4j通过XPath获取带命名空间的节点

一、JAXP对XPath的支持

 

       XPath是从JAXP1.3开始被支持的,在这些API中,其核心接口有XPath和XPathExpression,它们都在javax.xml.xpath包中,分别表示XPath对象以及被预编译后的表达式对象。

       例如,对于如下的示例文件(schema_test_copy.xml)     

<?xml version="1.0" encoding="UTF-8"?>
<templet>	
	<bean name="user" class="com.daniele.appdemo.test.domain.User"></bean>
	<bean name="company" class="com.daniele.appdemo.test.domain.Company"></bean>
	<description date="2013-06-07">This is a XML Schema example.</description>
</templet>

       我们可以利用上述两个和XPath相关的接口进行一系列的节点访问操作。

public static void main(String[] args) throws XPathExpressionException, IOException {
	// 返回默认的DOM对象模型的XPath工厂
	XPathFactory factory = XPathFactory.newInstance();
	XPath xPath = factory.newXPath();
		
        // 获取templet下name属性值为user的bean元素的class属性
	String expression = "/templet/bean[@name='user']/@class";
	InputSource source = new InputSource();
	source.setByteStream(new FileInputStream(new File("resource/xml/schema/schema_test_copy.xml")));
		
	// 预编译表达式,这种方式对于对同一个表达式多次求值来说,可提高运行效率,并且是线程安全的
	XPathExpression compiledExpression = xPath.compile(expression);
	System.out.println(compiledExpression.evaluate(source));
		
}

       上述代码执行后将会正确的得到schema_test_copy.xml文件中第一个bean元素的class的属性值。

       现在,把xml文档的内容做如下修改(schema_test.xml):

<templet xmlns="http://www.appdemo.daniele.com/schema/templet"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.appdemo.daniele.com/schema/templet ../../../schema/schame_test.xsd">
	
	<bean name="user" class="com.daniele.appdemo.test.domain.User"></bean>		
	<bean name="company" class="com.daniele.appdemo.test.domain.Company"></bean>
	<description date="2013-06-07">This is a XML Schema example.</description>
</templet>

       注意对比文件中根节点的变化,它在schema_test_copy.xml的基础上增加了两个与命名空间相关的属性xmlns和xmlns:xsi,其中xmlns是我们自定义文档结构规范的命名空间,是使用XPath时需要考虑的重点。

       此时我们再次运行上面的main()方法后会发现将得不到任何输出结果。这主要是由于XPath不支持默认命名空间造成的,因此我们需要将前缀和相关的URI关联起来。

       为达到这个目的,JAVA为我们提供了一个javax.xml.namespace.NamespaceContext接口,它的目的在于让我们可以在XPath接口对象中设置这个context,当XPath进行编译时,会根据前缀和URI的映射关系来匹配实际的节点。    

       NamespaceContext接口定义有如下三个方法:

       1)public String getNamespaceURI(String prefix):获取绑定到当前范围中前缀的命名空间 URI;

       2)public String getPrefix(String namespaceURI):获取绑定到当前范围命名空间 URI的前缀;

       3)public Iterato getPrefixes(String namespaceURI):获取绑定到当前范围命名空间 URI的所有前缀。

       下面来自定义实现一个NamespaceContext:   

package com.daniele.appdemo.xml.jaxp.xpath;

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

import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;

/**
 * <p>默认的命名空间处理器</p> 
 * @author  <a href="mailto:code727@gmail.com">Daniele</a>
 * @version 1.0.0, 2013-7-11
 * @see     
 * @since   AppDemo1.0.0
 */
public class DefaultNamespaceContext implements NamespaceContext {
	
	/** 维持前缀与命名空间URI的映射关系(K:前缀,V:命名空间URI) */
	private Map<String,String> namespaceMap = new HashMap<String,String>();
	
	public DefaultNamespaceContext() {
		addNamespace("xsi", XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI);
	}
	
	public void addNamespace(String prefix, String namespaceURI) {
		namespaceMap.put(prefix, namespaceURI);
	}
	
	/**
	 * <p>获取绑定到当前范围中前缀的命名空间 URI。</p> 
	 * @author <a href="mailto:code727@gmail.com">Daniele</a> 
	 * @param prefix
	 * @return 
	 * @since AppDemo1.0.0 
	 */
	public String getNamespaceURI(String prefix) {
		String namespaceURI = namespaceMap.get(prefix);
		return namespaceURI != null ? namespaceURI : XMLConstants.NULL_NS_URI;
	}

	/**
	 * <p>获取绑定到当前范围命名空间 URI的前缀。</p> 
	 * @author <a href="mailto:code727@gmail.com">Daniele</a> 
	 * @param namespaceURI
	 * @return 
	 * @since AppDemo1.0.0 
	 */
	public String getPrefix(String namespaceURI) {
		Set<String> keySet = namespaceMap.keySet();
		for (String key : keySet) {
			if (namespaceMap.get(key).equals(namespaceURI))
				return key;
		}
		return XMLConstants.DEFAULT_NS_PREFIX;
	}

	/**
	 * <p>获取绑定到当前范围命名空间 URI的所有前缀。</p> 
	 * @author <a href="mailto:code727@gmail.com">Daniele</a> 
	 * @param namespaceURI
	 * @return 
	 * @since AppDemo1.0.0 
	 */
	public Iterator<?> getPrefixes(String namespaceURI) {
		List<String> prefixes = new ArrayList<String>();
		Set<String> keySet = namespaceMap.keySet();
		for (String key : keySet) {
			if (namespaceMap.get(key).equals(namespaceURI))
				prefixes.add(key);
		}
		return prefixes.iterator();
	}

}

    完成后利用这个实现类,将前面的main()方法做如下修改(注意第5,11,12,15行的代码):

public static void main(String[] args) throws IOException, XPathExpressionException {
	XPathFactory factory = XPathFactory.newInstance();
	XPath xPath = factory.newXPath();
		
	DefaultNamespaceContext defaultNamespaceContext = new DefaultNamespaceContext();
	/*
	 *  设置前缀与命名空间URI的映射关系
	 *  XPath表达式中使用的前缀与文档中实际的前缀并没有关联,这里只是为了在XPath中增加一个前缀标识所有。
	 *  但前缀对应的命名空间URI必须与文档中实际的命名空间URI保持一致
	 */
	defaultNamespaceContext.addNamespace("t", "http://www.appdemo.daniele.com/schema/templet");
	xPath.setNamespaceContext(defaultNamespaceContext); 
		
	InputSource source = new InputSource(new FileInputStream(new File("resource/xml/schema/schema_test.xml")));
	String expression = "/t:templet/t:bean[@name='user']/@class";
	XPathExpression compiledExpression = xPath.compile(expression);
	System.out.println(compiledExpression.evaluate(source));
}

       再次运行main()方法将重新得到前面相同的运行结果。

 

二、Dom4j对XPath的支持

 

       除了JAXP外,JDOM和Dom4j也提供了对XPath的支持。其中在Dom4j中,与JAXP的XPathExpression作用类似的接口为org.dom4j.XPath,这是在dom4j-1.x.x.jar中,因此在实际的使用过程中需将此包加入到classpath中。

       例如,利用XPath获取上述schema_test_copy.xml中无命名空间的节点:   

package com.daniele.appdemo.xml.dom4j;

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

/**
 * <p>Dom4j对XPath支持的测试类</p> 
 * @author  <a href="mailto:code727@gmail.com">Daniele</a>
 * @version 1.0.0, 2013-7-18
 * @see     
 * @since   AppDemo1.0.0
 */
public class Dom4jXPathTester {

	public static void main(String[] args) throws DocumentException {
		
		DocumentFactory factory = DocumentFactory.getInstance();
		SAXReader reader = new SAXReader(factory);
		
		// 解析无命名空间的XML文档
		Document document = reader.read(new File("./resource/xml/schema/schema_test_copy.xml"));
		Element root = document.getRootElement();
		
		String subNodeName = "bean";
		/* 
		 * 从工厂(DocumentFactory)对象或DocumentHelper中创建XPath对象,
		 * 与JAXP的XPathExpression类似,XPath的作用在于避免对同一个XPath求值时进行重复编译的问题
		 */
		XPath rootSubNodePath = factory.createXPath(root.getPath() + "/" + subNodeName);
		System.out.println("根元素" + root.getName() + "内共有"
				+ rootSubNodePath.selectNodes(document).size() + "个"
				+ subNodeName + "子节点");
		
		subNodeName = "description";
		rootSubNodePath = DocumentHelper.createXPath(root.getPath() + "/" + subNodeName);
		Node subNode = rootSubNodePath.selectSingleNode(document);
		System.out.println("根元素" + root.getName() + "子节点"
				+ subNode.getName() + "的文本值为:" + subNode.getText());
	}

}
       运行后将得到如下结果:

       根元素templet内共有2个bean子节点
       根元素templet子节点description的文本值为:This is a XML Schema example.

       与JAXP的情况一样,如果上述代码用来获取schema_test.xml文件中带命名空间的节点,则同样不会得到预期结果。为此,Dom4j也提供了与JAXP类似的解决方案,实际使用情况甚至比JAXP的还要方便和灵活。

       Dom4j也提供了一个名为NamespaceContext的接口(与javax.xml.namespace.NamespaceContext没有任何关系),它可以根据某一个前缀来得到对应的URI,它在Dom4j的依赖包jaxen-1.x.jar中,因此在使用时需要将此包导入到classpath中。

       jaxen提供了一个NamespaceContext的默认实现类SimpleNamespaceContext。在这个实现类中有一个叫namespaces的Map成员属性,它是用来维护命名空间前缀和URI的映射关系的。当进行XPath求值时,首先会将表达式中的前缀标识提取出来,再根据这个标识,到它所关联的NamespaceContext的映射中获取对应的URI,最终再调用NamespaceContext接口方法translateNamespacePrefixToUri(String prefix)返回URI。

      对于SimpleNamespaceContext来说,它有如下两种方式来添加命名空间关系:

      1)利用构造函数来添加——public SimpleNamespaceContext(Map namespaces), 这种方式传入一个已经在外部设置好了的映射关系即可;  

      2)调用SimpleNamespaceContext实例的addNamespace(String prefix, String URI)方法来逐条添加。

      完成后,再调用XPath实例的setNamespaceContext(namespaceContext)方法,将Context实例传入即可。例如:    

package com.daniele.appdemo.xml.dom4j;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.DocumentHelper;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.jaxen.NamespaceContext;
import org.jaxen.SimpleNamespaceContext;

/**
 * <p>Dom4j利用XPath获取具有命名空间的节点的测试类</p> 
 * @author  <a href="mailto:code727@gmail.com">Daniele</a>
 * @version 1.0.0, 2013-7-18
 * @see     
 * @since   AppDemo1.0.0
 */

public class Dom4jNamespaceXPathTester {

	public static void main(String[] args) throws DocumentException {
		
		DocumentFactory factory = DocumentFactory.getInstance();
		SAXReader reader = new SAXReader(factory);
		
		// 解析具有命名空间的XML文档
		Document document = reader.read(new File("./resource/xml/schema/schema_test.xml"));
		
		// 命名空间前缀与URI的映射
		Map<String, String> namespaceMap = new HashMap<String, String>();
		namespaceMap.put("t", "http://www.appdemo.daniele.com/schema/templet");
		XPath xPath = null;
		
                // 根据映射关系构建NamespaceContext实例
		NamespaceContext namespaceContext = new SimpleNamespaceContext(namespaceMap);
		xPath = DocumentHelper.createXPath("/t:templet/t:bean");
		xPath.setNamespaceContext(namespaceContext);
		System.out.println(xPath.selectNodes(document).size());
		
		xPath = factory.createXPath("/t:templet/t:bean");
		xPath.setNamespaceContext(namespaceContext);
		System.out.println(xPath.selectNodes(document).size());		
	}

}

       对于XPath的实例来说,可以完成摒弃对NamespaceContext实例的创建和设置,可以调用它的另外一个方法setNamespaceURIs(Map map),直接将映射关系传递给这个方法就可以了。例如:  

// 命名空间前缀与URI的映射
Map<String, String> namespaceMap = new HashMap<String, String>();
namespaceMap.put("t", "http://www.appdemo.daniele.com/schema/templet");
XPath xPath = null;
		
xPath = DocumentHelper.createXPath("/t:templet/t:bean");
xPath.setNamespaceURIs(namespaceMap);
System.out.println(xPath.selectNodes(document).size());
		
xPath = factory.createXPath("/t:templet/t:bean");
xPath.setNamespaceURIs(namespaceMap);
System.out.println(xPath.selectNodes(document).size());
      在setNamespaceURIs()方法的内部,它会创建一个SimpleNamespaceContext来维护映射关系(具体实现在org.dom4j.xpath.DefaultXPath中)。

      对于上述两种方式,都有一个比较明显的缺陷,即对于每一个新建的XPath实例来说,在求值之前都需要设置一次context或映射关系,这是比较繁琐的。

      为此,Dom4j也提供了一个类似JAXP那样的全局设置方式,即调用DocumentFactory实例的setXPathNamespaceURIs(Map map)方法。

public static void main(String[] args) throws DocumentException {
		
		DocumentFactory factory = DocumentFactory.getInstance();
		SAXReader reader = new SAXReader(factory);
		
		// 解析具有命名空间的XML文档
		Document document = reader.read(new File("./resource/xml/schema/schema_test.xml"));
		
		// 命名空间前缀与URI的映射
		Map<String, String> namespaceMap = new HashMap<String, String>();
		namespaceMap.put("t", "http://www.appdemo.daniele.com/schema/templet");
		// 设置全局的映射关系
		factory.setXPathNamespaceURIs(namespaceMap);
		XPath xPath = null;
		
		xPath = DocumentHelper.createXPath("/t:templet/t:bean");
		System.out.println(xPath.selectNodes(document).size());
		
		xPath = factory.createXPath("/t:templet/t:bean");
		System.out.println(xPath.selectNodes(document).size());
		
	}  

      回顾第一部分中最后一块代码片段,JAXP的javax.xml.xpath.XPath并不代表某一个具体的表达式对象(Dom4j中的XPath更像是javax.xml.xpath.XPathExpression),因此在javax.xml.xpath.XPath实例中设置的NamespaceContext就表示为全局的,即后续所有与编译好了的XPathExpression(对于Dom4j来说是XPath)都使用同一个全局的NamespaceContext来将表达式中的前缀标识替换成对应的URI。

Jaxen XPath库在XML处理中的应用与实战 本文还有配套的精品资源,点击获取 简介:Jaxen是一个Java库,用于在多种XML DOM上执行XPath表达式。1.1.6版本的“jaxen-1.1.6.jar”文件是处理XML数据的重要组件。XPath是一种在XML文档中查找信息的语言,而Jaxen提供了与DOM4J等XML API协同工作的XPath支持。Jaxen旨在独立于具体的XML解析器和DOM实现,提供可移... 阅读详情

相关推荐

dom4j 读取带有命名空间的xml文件

NULL 博文链接:https://qiaokeli.iteye.com/blog/1790138

JAVA通过XPath解析XML性能比较(原创)

  (转载请标明原文地址) 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容。 1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。在此基础上,为了减少DOM、SAX的编码量,出现了JDOM,其优点是...

weixin_30950607的博客 386

opencode完整使用指南:从安装配置到Agent式编程实战

AI编程工具正从辅助补全向智能体协作演进。编程智能体不仅理解项目全局,还能自主执行原子级重构、测试验证等工程任务,显著提升研发效能。以opencode为代表的开源终端AI编程工具,凭本地优先和灵活模型接入成为技术团队新宠。本文围绕opencode的完整使用链路展开,从Node.js环境准备、npm全局安装,到解决Windows环境变量配置问题,再到接入OpenAI、Anthropic或多模型管理平台,梳理一套标准化接入方案。同时演示VSCode插件调用、LSP语义分析及Playwright驱动的浏览器自动化

weixin_28837817的博客 319

JAVA实现可视化的xpath_Java DocumentHelper.createXPath方法代码示例

import org.dom4j.DocumentHelper; //导入方法依赖的package包/类public void loadCollection(){if ( metaObjects == null ) {metaObjects = new HashMap>();Map uris = new HashMap();uris.put( "ddsws", "http://www.dle...

weixin_35773916的博客 695

3D视觉-结构光测量-线结构光测量

线结构光测量中,由激光器射出的激光光束透过柱面透镜扩束,再经过准直,产生一束片状光。这片光束像刀刃一样横切在待测物体表面,因此线结构光法又被成为光切法。线结构光测量常采用二维面阵CCD作为接受器件,因此只要通过增加垂直于面阵探测器的第三维度方向,就可以实现对三维物体的测量。

qq_20660115的博客 3129

关于Vscode配置Unity环境时的一些报错问题(持续更新)

3.找到设置文件,添加如下代码,用于告诉VSCode)在处理 C# 项目时优先使用 C# 扩展来加载和管理项目,而不是使用 C# Dev Kit 或其他扩展。1.很可能是unity的插件版本问题,打开window > package manager将。2.很可能是项目文件的问题,建议unity打开edit > perfercenes。3.手动重装其他版本的.Net框架(去官网找,多下几个无所谓的)解决:(由于造成问题不一样,所以建议都尝试一次)下载net请求超时(一般都会超时很正常的)

bug制造机 1888

xPath解析XML文件

一种:不带名称空间的XML,可以直接用xapth表达式解析 1 Document document = DocumentHelper.parseText(resultXML); 2 Element ele = (Element) document.selectSingleNode("/CUSTINFORESPONSE/MSGBODY"); 二种:带名称空间的xml ...

weixin_30617695的博客 803

【Azure 架构师学习笔记】- Azure Private Endpoint

公有云的其中一个特点是默认允许公网访问, 这就对企业环境带来风险,也是很多年前企业对公有云抵触的其中一个原因,现在这类问题已经很少,因为有了很多技术来确保云上的资源被安全地访问。其中Private endpoint(PE)就起到了很重要的作用。云上的某个资源如VM会创建在特定的网络(VNet/Subnet)上, 而其他如Storage Account , Azure SQL等PaaS服务则没有。如果你需要用VM 来访问这些PaaS资源,VM 就会通过资源的公网IP 来访问。

MVP黄钊吉(發糞塗牆) 1789

java xml格式的字符串,java怎么解析xml格式的字符串

java如何解析xml格式的字符串Stringresult="";请问各位大神用dom4j还是jdom解析这个字符串result,最好有代码演示,谢谢!------最佳解决方案--------------------个人喜欢Dom4jimportorg.dom4j.*;importorg.dom4j.io.SAXReader;importjava.util.List;publicclas...

weixin_34044446的博客 234

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 192

【微服务】Spring Aop原理深入解析

spring原理深度解析

congge 1万+

Java 数据 08:XML 解析(Dom4j/XPath 提取节点信息)

本文介绍了在Java中使用Dom4j和XPath高效解析XML文档的方法。主要内容包括: Dom4j的优势:相比原生DOM和SAX,Dom4j具有易用API、高性能、内置XPath支持等特点,是Java社区广泛采用的XML处理库。 基础解析:通过SAXReader加载XML文档,使用Element接口遍历节点树,获取元素文本和属性值。 XPath应用:介绍XPath语法,演示如何使用selectNodes、selectSingleNode等方法精准定位XML节点,支持属性过滤、层级查询等高级操作。 实用技巧

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

液态神经网络(Liquid Neural Networks)从线虫大脑到下一代 AI

液态神经网络(Liquid Neural Networks,LNN)是一类具有动态内部结构的神经网络,其灵感来源于生物神经系统,尤其是大脑中神经元如何以复杂、非线性的方式响应外部刺激。与传统神经网络不同,液态神经网络的每个神经元在处理输入时,不再是静态线性或非线性变换,而是基于一个微分方程模型进行响应。这种建模方式使神经元的行为具有时间连续性和动态适应性。换句话说,它不仅“记住”过去的信息,还能根据当前环境实时调整自身的动态特性,这对于感知、决策、预测等任务都非常关键。

hello.reader 7416

【Dom4j】Dom4j完整教程详解

DOM4J是 dom4j.org 出品的一个开源XML解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。Dom:把整个文档作为一个对象。DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:Attribute定义了 XML 的属性。Branch指能够包含子节点的节点。

C__jx的博客 3万+

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 370

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Dom4j完整教程

目录 1、DOM4J简介 2、XML文档操作1 2.1、读取XML文档: 2.2、获取根节点 2.3、新增一个节点以及其下的子节点与数据 2.4、写入XML文件 2. 5、 遍历xml节点 2.6、创建xml文件 2.7、修改节点属性 2.8、删除节点 3、XML文档操作2 3.1、Document对象相关 1、读取XML文件,获得document对象....

付凯 2676

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【转】玩转 XPath 和缺省命名空间(Default Namespaces)

原文出自:http://www.edankert.com/defaultnamespaces.html 翻译文出自:http://wakan.blog.51cto.com/blog/59583/7220 诸如“为什么用 XPath 的表达式进行查询,却没有返回所期望的结果?”的问题通常都与命名空间(NameSpace)有关,而且绝大多数是与缺省命名空间(Default Namespace

yuyujulin的专栏 902

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Dom4j和Xpath

1、DOM4J简介     DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。     DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。     Dom:把整个文档作为一个对象。   DOM4J 最大的特色是使用大量的接口。它

oLuoXiaoFeng的博客 376

JAXP,sax与dom4j解析xml文档及XPath在文档内容定位中的应用(持续更新,初学者的野路子、参考和想当然,不断学习和专业化)

一、需求:一个基本的学生成绩管理系统,用xml文档模拟数据库,要求能够向数据库实时增删改查学生成绩数据 二、需求分析: 1.需要分层定义和实现,在用户层由用户输入查询信息,在底层做好数据接收,异常抛出、处理和程序测试,保证在UI层不会出现未捕获和处理的异常,并能正确处理非法输入和操作信息不存在的情况,给用户一个良好的用户体验。 2.定义学生类封装id,name,sco

ghbfgb的博客 2519

Dom4j 使用心得

优秀网站:http://www.zvon.org/xxl/XPathTutorial/General/examples.html 学习XPath操作http://blog.iyi.cn/tech/2005/10/dom4jxml.html  用Dom4j解析XML及中文问题  DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:Dom4j is an easy to us

凯尔探索 6272

java xpath和dom4j_学习:Dom4j和Xpath

1、DOM4J简介DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP。DOM4J使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。Dom:把整个文档作为一个对象。DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:魂牵梦萦魂牵梦萦魂牵梦...

weixin_39985286的博客 403

java xpath 命名空间_【转】玩转 XPath 和缺省命名空间(Default Namespaces)

诸如“为什么用 XPath 的表达式进行查询,却没有返回所期望的结果?”的问题通常都与命名空间(NameSpace)有关,而且绝大多数是与缺省命名空间(Default Namespace)有关。本文试图解释这个问题并针对三种流行的 XPath 实现给出解决方法:Jaxen、JAXP XPPathFactory 以及 XSLT。内容列表1. 问题描述2. “前缀-命名空间”映射3. Jaxe...

weixin_39806388的博客 600

java xpath和dom4j_Dom4j和Xpath(转)

DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP。DOM4J使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。Dom:把整个文档作为一个对象。DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:Attribute定义了 XML 的属性...

weixin_31970409的博客 355

Dom4j完整教程~DOM4J简介

DOM4J是dom4j.org出品的一个开源XML解析包。DOM4J应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。 DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义: Attribute 定义了XML的属性。 Bran...

小强快跑~~ 2989
上一篇: XML文档约束之Schema
下一篇: JAXP实现Schema和DTD验证
心如止水dy
博客等级 码龄19年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值