xml查询入门笔记
来源:互联网 发布:手机淘宝联盟怎么注册 编辑:程序博客网 时间:2024/06/14 01:50
刚学xml,买了本《java与xml》第二版,浏览以后,决定动手试验一下。
看书的时候接触到了许多概念,比如:dom,sax,jdom,jaxp,xquery,xpath等等,有点,都是大概浏览了一下。
在最基础的一些试验过后,我想到了一个很重要的应用,就是xml查询。google里忙了一阵,在ibm的网站上找到一个xquery教程,上面说xquery是建立在xpath基础上的,而且功能还挺强。我大意的认为xpath不用看了(后悔啊)。我照着教程里说的下了个XQEngine ,是0.66版的,我虽然学了点XQuery语法但不会用这个引擎,文档也不是很清楚,于是上网找了一个例子(也只能找到一个关于XQEngine的例子)便照着做了起来,可是总报错,最后才知道是那个例子用的引擎版本是老的,新版本的API已经改了很多,用法大不一样。没办法,只能自己想了,费了不少功夫才入了门。
xml文件:
books.xml
<?xml version="1.0" encoding="gb2312"?>
<books>
<book id="1">
<name>goodbook</name>
<price>200.20</price>
</book>
<book id="2">
<name>badbook</name>
<price>100.10</price>
</book>
</books>
另有查询文件query.txt
let $book:=//book
where $book/@id<=1
return
<books>
{
$book
}
</books>
java文件testxqengine.java
import com.fatdog.xmlEngine.XQEngine;
import com.fatdog.xmlEngine.ResultList;
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.PrintWriter;
public class testxqengine {
public static void main(String[] args)
{
XQEngine myengine= new XQEngine();
try
{
myengine.setXMLReader(XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser")); //用的xerces解析器
myengine.setDocument("d:/java-procs/xmltest/data/books.xml");
ResultList rl=myengine.setQueryFromFile("d:/java-procs/xmltest/data/query.txt"); //这里暂用绝对路径做试验
System.out.println(rl.emitXml(true)); //这个true是让输出的xml符合一般格式的
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
程序输出结果:
<books><book id="1">
<name>goodbook</name>
<price>200.20</price>
</book>
<book id="2">
<name>badbook</name>
<price>100.10</price>
</book>
</books>
看到结果出来,当时那个激动啊,因为在论坛里问了半天没人理我啊。
但又一个问题来了,如果我只要其中的一个节点的值怎么办,难道还要先输出文件再用dom解析?!(当然不可能),和往常一样,在论坛里没有找到满意的答复。看遍了XQEngine的API文档也找不到解析ResultList的方法。忽然觉得不对劲,很可能是用其它的办法获得特定节点的值。于是回过去看《java与xml》第二版,终于在jdom那章(当时没怎么在意这张,因为书上说1.0版本还没出来)找到了XPath,顺带把jdom详细的看了一遍,发现这个冬冬还真的很方便,上机试了一下,果然很爽
TestJdom.java:
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.Element;
import org.jdom.Text;
import org.jdom.xpath.XPath;
import java.io.IOException;
public class TestJdom {
public static void main(String[] args) {
SAXBuilder mybuilder = new SAXBuilder();
try {
Document doc = mybuilder.build("data/books.xml");
Element root=doc.getRootElement();
String name=((Element)XPath.selectSingleNode(root,"book[@id='1']/name")).getText();
System.out.println(name);
} catch (JDOMException e) {
e.printStackTrace();}
catch (IOException e) {
e.printStackTrace();
}
}
}
到这里,xml查询终于入了门,总结如下:xpath用于选择特定的节点并直接处理很方便,xquery对于查询xml文件中部分内容并输出为xml文件非常方便。
再接再厉吧!
- xml查询入门笔记
- XML入门笔记
- xml入门学习笔记
- XML学习笔记之入门
- XML学习笔记,快速入门
- JavaEE 自学笔记--XML入门
- xml技术1-入门笔记
- 18句话入门SQLServer XML查询
- 18句话入门SQLServer XML查询
- 18句话入门SQLServer XML查询
- 入门SQLServer XML查询18句话
- 18句话入门SQLServer XML查询
- 18句话入门SQLServer XML查询
- MS SQL2005 XML 字段 查询 操作笔记
- 《SQL查询凡人入门》学习笔记之一
- android 入门学习笔记 电话簿查询
- XML:ASP.NET入门笔记(二)
- XML实例入门笔记(01) - 序
- Codeforces #77 Volleybal
- C# winform与 flash as 的交互通讯
- 宝宝来了
- 用JS获取表格单元中的数据
- SHRINK SPACE CHECK
- xml查询入门笔记
- C#鼠标自动点击
- Oracle的merge
- 项目总结:ORACLE通过JOB定时创建表的运用
- td定义了width:400px;但在页面里不起作用
- 数字摘要码
- 02-08 控制AutoCAD环境(八) 提示用户输入
- 合理规划您的硬盘分区
- instanceof