`
yuancihang
  • 浏览: 145194 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

使用JDK自带类库操作XML三 Xpath

阅读更多

1. 环境

jdk1.6

2. 代码

public class XmlException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public XmlException(String message){
        super(message);
    }
   
    public XmlException(String message, Throwable cause){
        super(message, cause);
    }
}

 

import java.util.HashMap;

import java.util.Iterator;
import java.util.Map;

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

public class DefaultNamespaceContext implements NamespaceContext {
   
    private Map<String, String> namespaceMap = new HashMap<String, String>();
   
    public DefaultNamespaceContext(Map<String, String> namespaceMap){
        this.namespaceMap = namespaceMap;
    }

    public String getNamespaceURI(String prefix) {
        System.out.println("prefix = " + prefix);
        if (prefix == null)
            throw new NullPointerException("Null prefix");
        else if ("xml".equals(prefix))
            return XMLConstants.XML_NS_URI;
        else if(namespaceMap.containsKey(prefix)){
            return namespaceMap.get(prefix);
        }
        return XMLConstants.NULL_NS_URI;
    }

    public String getPrefix(String namespaceURI) {
        System.out.println("namespaceURI = " + namespaceURI);
        throw new UnsupportedOperationException();
    }

    public Iterator getPrefixes(String namespaceURI) {
        System.out.println("namespaceURI = " + namespaceURI);
        throw new UnsupportedOperationException();
    }

}

 

import java.io.IOException;

import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Map;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.xml.sax.InputSource;

/**
 * 实用XPATH解析xml的工具
 * xpath表达式用法: /图书馆/书/@名称 , /configuration/property[name = 'host']/value
 *
 * @author yuan
 *
 */
public class XpathTool {
   
    private String xmlFile;
    private String encoding;
   
    public XpathTool(final String xmlFile){
        this(xmlFile, "UTF-8");
    }
   
    public XpathTool(final String xmlFile, final String encoding){
        this.xmlFile = xmlFile;
        this.encoding = encoding;
    }
   
    public String compute(String expression, Map<String, String> namespaceMap) throws XmlException{
        String value = "";
        InputStreamReader isr = null;
        try {
            isr = new InputStreamReader(XpathTool.class.getResourceAsStream(xmlFile),encoding);
            InputSource source = new InputSource(isr);
            XPath xpath = XPathFactory.newInstance().newXPath();
           
            if(namespaceMap != null){
                xpath.setNamespaceContext(new DefaultNamespaceContext(namespaceMap));
                System.out.println("设置名称空间...");
            }
           
            value = xpath.evaluate(expression, source);
        }  catch (UnsupportedEncodingException e) {
            throw new XmlException(e.getMessage(), e);
        } catch (XPathExpressionException e) {
            throw new XmlException(e.getMessage(), e);
        } finally{
            if(isr!=null){
                try {
                    isr.close();
                } catch (IOException e) {
                    throw new XmlException(e.getMessage(), e);
                }
            }//if
        }
       
        return value;
    }
  
   
}

 

3. 使用的xml文件test.xml

<?xml version="1.0"?>

<configuration>

<property>
  <name a="1">host</name>
  <value>http://192.168.3.249</value>
  <description>系统主机地址</description>
</property>

<property>
  <name>login</name>
  <value>/page/Default.aspx</value>
  <description>登陆页面</description>
</property>

</configuration>

 

4. 用法

        XpathTool xpath = new XpathTool("d:/test.xml");
        System.out.println(xpath.compute("/configuration/property[name = 'host']/value", null));

分享到:
评论

相关推荐

    xml jdk1.6 jquery mysql API

    对于JDK 1.6,开发者需要掌握如何使用Java类库,如java.io和java.util,以及如何利用JDBC(Java Database Connectivity)连接和操作MySQL数据库。对于jQuery,理解选择器语法、事件处理和动画效果的创建是基础。同时...

    JDK-1.6-Windows-32位 官方

    7. **XPath和XSLT支持**:JDK 1.6包含完整的XML处理能力,支持XPath查询和XSLT转换,便于处理XML数据。 8. **增强的安全性**:加强了对SSL/TLS协议的支持,提升了加密算法的安全性,并提供了更强的权限管理机制。 ...

    jdk6(1.6.0_45)

    8. **XPath API**:JAXP(Java API for XML Processing)在JDK 6中增加了对XPath 1.0的支持,使得在Java代码中处理XML文档更加便捷。 9. **JDBC 4.0**:带来了自动连接管理、增强的数据库元数据查询和新的`...

    JDK1.6API中文版

    API(Application Programming Interface)是JDK的核心部分,提供了丰富的类库供开发者使用,以实现各种功能。JDK1.6 API中文版是这个版本的API文档的中文翻译,对于中国开发者来说,这是一个极其有用的参考资料,...

    jdk6.0中文文档

    5. **开发工具**:涵盖了JDK自带的开发工具,如javac编译器、jar打包工具、javadoc文档生成器等,以及如何使用这些工具进行开发。 6. **部署和安全**:讨论了Java应用的部署策略、网络应用的安全控制,以及如何使用...

    java常用类库中文速查表

    首先,我们需要了解基础类库Commons Lang,它提供了对JDK中java.lang包的补充,提供了各种各样的Util工具类,简化了很多常用的编程操作。例如,它提供了一套用于字符串处理的工具方法,包括判断字符串是否为空、去除...

    jdk-6u45-linux-x64.bin

    6. **XPath和XML处理**:JDK 1.6改进了XML处理,包括JAXB(Java Architecture for XML Binding)和JAXP(Java API for XML Processing),使得XML数据绑定和解析更加方便。 7. **增强的安全性**:1.6版本加强了Java...

    jdk 1.6 64位

    6. **XPath API**:提供了对XML文档查询的API,使得开发者可以更方便地处理XML数据。 7. **安全管理**:增强了Java的安全模型,提供更好的网络和本地文件系统保护,防止恶意代码的执行。 8. **国际化和本地化**:...

    jdk1.6 api中文文档

    6. **XPath支持**:`javax.xml.xpath`包提供了XPath语言的API,使得在XML文档中查找、导航和操作数据变得更加便捷。 7. **XML解析器**:JDK 1.6内置了更强大的XML解析器,如SAX和DOM解析器,以及StAX(Streaming ...

    包含1.7JDK 64位,1.6JDK64位

    - **XML处理**:更新了XPath和XSLT的实现,提高了处理XML文档的效率。 - **并发工具**:添加了ConcurrentHashMap等并发工具类,简化了多线程编程。 文件名`jdk-7u80-windows-x64.exe`代表的是JDK 1.7的第80次更新...

    JDK6免安装解压包

    7. **XPath API**:对XML处理提供了更强大的XPath API,方便开发者进行XML文档的查找和操作。 8. **脚本语言支持**:JDK6引入了JSR 223,允许Java平台集成其他脚本语言,如JavaScript、Groovy等。 **解压和配置步骤...

    超经典xml类

    例如,JDK自带的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可用于构建和操作DOM树。 2. SAX解析: SAX解析器不将整个文档加载到内存,而是通过事件处理器接口(如`ContentHandler`)...

    Java开发JDK,jdk1.6(JDK6)

    - **XPath和XSLT支持**:JAXP(Java API for XML Processing)增强了XPath和XSLT处理,方便XML数据的查询和转换。 - **JMX增强**:提高了Java Management Extensions的易用性和功能,便于管理和监控Java应用。 2....

    jdk 6 Linux版本

    - **XPath和XSLT**:增强了XML处理能力,支持XPath 1.0和XSLT 1.0。 JDK 6的安装和配置是开发Java应用的基础,对于学习Java编程或者部署Java服务的Linux用户来说至关重要。了解这些步骤和相关特性,可以帮助开发者...

    java开发手册 api文档(jdk1.8中文)

    《Java开发手册API文档(JDK1.8中文版)》是Java开发者的重要参考资料,它详细阐述了JDK1.8版本中的各种类库、接口、方法和异常等核心概念,帮助开发者理解和运用Java编程语言进行后端开发。文档内容涵盖广泛,包括...

    JDK6API中文参考手册

    10. **XPath和XSLT**:JDK6集成了对XML处理的API,如XPath用于查询XML文档,XSLT用于转换XML文档。 11. **异常链**:允许一个异常对象包含另一个异常作为其原因,这样可以在捕获和处理异常时更好地追踪问题的源头。...

    jdk6免安装版(1.zip

    9. **XPath和XSLT支持**:在Java中处理XML文档变得更加方便。 10. **改进的调试和性能分析工具**:如JConsole和VisualVM,帮助开发者监控和优化应用性能。 在使用JDK6时,需要注意的是,由于它是一个较旧的版本,...

    jdk6解压版

    JDK 6的解压版,如"jdk1.6.0_35",是为了方便那些不希望或者无法进行安装程序操作的用户准备的,可以直接在指定目录下解压并使用。 **一、JDK 6的主要特性** 1. **增强的Swing组件**:JDK 6对Swing组件进行了大量...

    jdk-6u26-windows-i586.rar

    - **改进的XML处理**:增强了Java API for XML Processing (JAXP),支持XPath 2.0和XSLT 2.0,使XML处理能力更加强大。 - **Scripting API**:JSR 223引入了脚本引擎,使得Java平台可以嵌入并执行各种脚本语言,如...

    解析XML的四种JAR包jdom.jar、SAX.jar、dom4j.jar、dom.jar

    dom4j提供了一种面向对象的API,使得操作XML更加方便,同时也支持XPath查询。相比DOM,dom4j的内存占用更低,性能更好,同时提供丰富的功能,是很多开发者的选择。 4. **dom.jar**: 这里的dom.jar通常指的是Java...

Global site tag (gtag.js) - Google Analytics