`
yunnick
  • 浏览: 392585 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转 XML的XPath的学习小结

    博客分类:
  • XML
阅读更多
现在以product.xml为例学习Xpath

product.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- product.xml -->
<product id="200">
 <name>UML Exam Simulator</name>
 <price>100</price>
 <topics name="UML">
  <topic id="UML_SM">
   <name>Static Modeling</name>
   <questions>100</questions>
  </topic>
  <topic id="UML_AE">
   <name>Architecture</name>
   <questions>80</questions>
  </topic>
  <topic id="UML_DM">
   <name>Dynamic Modeling</name>
   <questions>67</questions>
  </topic>
 </topics>
</product>


这里使用Dom4j来解析XML文件。需要将dom4j-full.jar 放到你的类路径下面
新建一个类Service,其内容如下:


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
public class Service{
    private String fileName;
 
    private Document document;
 
 public Document parse(String fileName) throws DocumentException, FileNotFoundException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new BufferedInputStream(
                 new FileInputStream(fileName)));
        return document;
 }
 private void writeDocument(String filename, Document doc) throws IOException {
  OutputFormat format = OutputFormat.createPrettyPrint();
  XMLWriter writer = new XMLWriter(new BufferedOutputStream(
           new FileOutputStream(filename)), format);
  writer.write(doc);
 }
 
 public void load(String fileName) throws InitDataException{
  this.fileName = fileName;
  
  try {
   document = parse(fileName);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
   throw new InitDataException("文件没有找到",e);
  } catch (DocumentException e) {
   e.printStackTrace();
   throw new InitDataException(e);
  }
 }
 
 public void store() throws StoreException{
  try {
   writeDocument(fileName,document);
  } catch (IOException e) {
   e.printStackTrace();
   throw new StoreException(e);
   
  }
 }
 
 public void testXpath(){
 //我们以<topic id="UML_SM">这个节点为当前节点来进行学习

 Element root = document.getRootElement();
  
 Element topic1 = (Element) root.selectSingleNode("//topics/topic[position()=1]");
 
String xpath = ""; //这里是用来练习Xpath的代码
  
  List list = topic1.selectNodes(xpath);
  Iterator i = list.iterator();
  while(i.hasNext()){
   Node e = (Node)i.next();
   System.out.println(e.getName());
  }
 }

 
}


直接拷贝过来会出现一些错误,创建两个异常类StoreException,InitDataException即可。

再建一个测试类Demo,内容如下:


public class Demo {
 public static void main(String[] args) {
  Service s= new Service();
  try {
   s.load("product.xml");
  } catch (InitDataException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  s.testXpath();
 }
}


现在我们来学习Xpath表达式的13种表示方式

1。ancestor 选择当前节点的祖先(以<topic id="UML_SM">为当前节点)

测试 ancestor::topics

修改testXpath()方法中的xpath:(后面都是这样修改,就不再提了)
运行Demo。
结果:
topics

测试 ancestor::*

结果:
topics
product
null

2。ancestor-or-self 选择当前节点及其祖先(以<topic id="UML_SM">为当前节点)

测试 ancestor-or-self::topics

结果:
topics


测试 ancestor-or-self::*

结果:
topic
topics
product
null

3。 attribute 选择当前结点的属性(以<topic id="UML_SM">为当前节点)

测试 attribute::*

结果:
id


4。 child 选择当前节点的所有孩子(以<topics name="UML">为当前节点,代码自己改吧)
测试 child::*

结果:
topic
topic
topic

测试 child::topic

结果:
topic
topic
topic


5。descendant 选择当前结点的所有后代 (以<topics name="UML">为当前节点)

测试 descendant::*

结果:
topic
topic
topic
name
questions
name
questions
name
questions

测试 descendant::questions

结果:
questions
questions
questions

6。 descendant-or-self 选择当前结点及其后代 (以<topics name="UML">为当前节点)

测试descendant-or-self::*

结果:
topics
topic
topic
topic
name
questions
name
questions
name
questions

测试 descendant-or-self::questions

结果:
questions
questions
questions

7。following 选择当前节点后面的所有节点 (以<topic id="UML_SM">为当前节点)

测试 following::*

结果:
topic
name
questions
topic
name
questions

测试 following::questions

结果:
questions
questions

8。following-sibling 选择当前节点之后、与当前节点具有同一父节点(兄弟节点)的所有节点。(以<topic id="UML_SM">为当前节点)

测试 following-sibling::*

结果:
topic
topic

9。namespace 选择和当前节点属于同一名称空间的所有节点。

10。parent 选择当前节点的父节点。(以<topic id="UML_SM">为当前节点)

测试 parent::node()

结果:
topics


11。 preceding 选择当前节点之前的所有节点。(以<topic id="id="UML_DM">为当前节点)

测试 preceding::*

结果:
topic
questions
name
topic
questions
name
price
name

测试 preceding::questions

结果:
questions
questions


12。 preceding-sibling  选择当前节点之前、与当前节点具有同一父节点(兄弟节点)的所有节点。(以<topic id="id="UML_DM">为当前节点)

测试 preceding-sibling::*

结果:
topic
topic


测试 preceding-sibling::topic

结果:
topic
topic


13。 self 选择当前节点。(以<topic id="id="UML_DM">为当前节点)

测试 self::node()

结果:
topic


Xpath 简写方式
有些轴可以使用缩写形式,其中包括:
@  代替 attribute::
//  代替 descendant-or-self::node()
.  代替 self::node()
.. 代替 parent::node()
无 代替 child:: (如果 XPath 表达式没有给出节点,则默认使用这个轴)
如果是用星号(*),可以选择特定节点的所有孩子,如 topics/* 选择 topics 下的所有子节点

------------------------------分割线------------------------------
注:以上XPath表达式的灵活运用,对于遍历整个XML树及灵活的查找XML节点很有帮助。在DHTML中DOM树的操作思想很类似,JavaScript提供了相应的方法
分享到:
评论

相关推荐

    基于Xpath的xml文件查询和更新

    XML(eXtensible Markup ...总结来说,基于Xpath的XML文件查询和更新是XML处理的重要部分,它使得在复杂的数据结构中定位和操作数据变得简单高效。了解并熟练掌握Xpath和DOM操作,对于处理XML数据的开发工作至关重要。

    Java中使用xpath获取xml中的数据

    总结,Java中使用XPath获取XML数据涉及的关键知识点包括: 1. XPath的基本概念和语法。 2. Java的`javax.xml.xpath`和`javax.xml.parsers`包的使用。 3. 如何构建`DocumentBuilderFactory`和`DocumentBuilder`来解析...

    从XML文件抽出XPath - C and C++

    总结起来,"从XML文件抽出XPath - C and C++"涉及的知识点主要包括: 1. XML的基本概念:元素、属性、文本等。 2. XPath的用途和基本语法:选取XML文档中的特定节点。 3. C++中的TinyXML库:解析XML,遍历DOM,实现...

    DOM操作XML,XPATH技术

    **标题与描述解析** 标题"DOM操作XML,XPATH...总结,DOM和XPath是XML处理的核心技术,它们在AJAX和其他Web开发场景中起着关键作用。通过理解并熟练掌握这两者,可以更高效地处理XML文档,实现动态、交互式的Web应用。

    XML Xpath路径详解

    ### XML XPath路径详解 #### 一、XPath简介 XPath(XML Path Language)是一种在XML文档中查找信息的语言。它提供了一种快速有效的方式来选择节点或节点集,这使得处理XML数据变得简单直观。 #### 二、XPath路径...

    Xpath 解析xml文件转化为csv文件

    总结一下,XPath是XML处理中的强大工具,能够方便地定位和选取XML文档中的数据。将XML文件转换为CSV文件是一项常见的数据处理任务,通常需要结合编程语言和相应的库完成。在实际操作中,需要考虑XML的结构、XPath的...

    支持xpath的高效xml解析库源代码

    该库的核心特性是支持XPath(XML路径语言),这使得开发者能够方便地对XML文档进行复杂的查询和操作。 **XPath支持** XPath是一种在XML文档中查找信息的语言,它可以用来选取节点、计算数值、判断条件等。PUGIXML...

    dom+xpath读取xml并导入oracle.rar

    总结来说,通过DOM解析XML文档构建树形结构,XPath查询获取所需数据,再利用JDBC将这些数据插入Oracle数据库,我们可以实现XML数据与Oracle数据库之间的高效交互。这在数据迁移、系统集成等场景下具有广泛应用价值。...

    kettle转换xml(XML Input Stream (StAX))

    总结来说,Kettle的XML Input Stream (StAX) 提供了一种高效、内存友好的方式来处理XML数据。通过合理配置,我们可以轻松地从XML文件中提取数据,然后进行清洗、转换,并最终加载到数据库或其他数据存储中。对于需要...

    js中使用xpath来解析xml元素实用.pdf

    总结一下,JavaScript中使用XPath解析XML元素的关键知识点包括: 1. XPath是用于在XML文档中查找信息的语言,它基于路径表达式。 2. `selectNodes()`和`selectSingleNode()`方法在IE中用于选取XML节点,但不是标准...

    解析xml文件并且保存xpath

    总结,解析XML文件并利用XPath选取特定节点是数据处理中的常见任务,涉及到的知识点包括XML的结构、XPath语法、XML解析器的使用以及相关工具的运用。理解并熟练掌握这些知识点,能有效提升处理XML数据的效率和准确性...

    Dom4j结合XPath解析XML文件路径表达式

    总结来说,理解XPath的路径表达式以及如何在Dom4j中使用它们是处理XML文档的关键技能。掌握这两种路径类型,不仅可以精确地定位XML文档中的数据,还能提高代码的可读性和可维护性。在实际开发中,根据需求选择合适的...

    Dom4j 解析Xml文档及 XPath查询 学习笔记

    **标题:** Dom4j 解析Xml文档及 XPath查询 学习笔记 **正文:** XML(eXtensible Markup Language)是一种标记语言,常用于数据交换、配置存储以及文档结构化表示。在Java世界中,解析XML文档有多种库,其中Dom4j是...

    xpath详解总结-很全面.docx

    在学习 XPath 之前,需要了解 XML 的基础知识,例如节点、元素、属性、原子值、处理指令、注释、根节点、命名空间等概念。 XPath 路径表达式的语法规则: * 路径 = 相对路径 | 绝对路径 * XPath 路径表达式 = 步进...

    XML 路径语言(XPath) 版本 1.0

    ### XML路径语言(XPath)版本1.0:关键知识点解析 #### 一、XPath简介与背景 **XPath** 是一种用于查找 **XML** 文档中信息的语言,它于1999年11月16日由 **W3C** (万维网联盟)发布为推荐标准。XPath 的设计...

    XPath教程

    XPath,全称XML Path Language,是一种在XML文档中查找信息的语言。它被设计用来选取XML文档中的节点...通过本教程的学习,你应该能够运用XPath有效地在XML文档中导航、选取信息,并在XSL和其他XML相关技术中灵活应用。

    xpath详解总结,很全面[参照].pdf

    在学习 XPath 之前,需要了解 XML 的节点、元素、属性、原子值、处理指令、注释、根节点、命名空间以及节点间的关系,如父、子、兄弟、先辈、后代等概念。 XPath 路径表达式语法包括相对路径和绝对路径两种。路径...

    Addison Wesley - Essential XML Quick Reference - A Programmer's Reference to XML, XPath, XSLT, XML Schema, SOAP and More.pdf

    #### 小结 《Essential XML Quick Reference》不仅涵盖了XML的基础知识,还深入介绍了XPath、XSLT、XML Schema、SOAP等高级主题,为读者提供了全面的技术指南。无论是对于初学者还是经验丰富的开发者来说,这本书都...

Global site tag (gtag.js) - Google Analytics