收 藏
投 稿
繁 体
RSS
首 页
运 营
学 院
建 站
论 坛
Web
master8.net
网站运营
欢迎在本站发布信息,在线投递稿件
请点这里
。编辑QQ:4908220,欢迎联系交流。
业界动态
创业故事
推广研究
策划盈利
电子商务
企业平台
站长工具
SEO查询
Whois查询
Pr查询
域名查询
IP查询
网页编辑器
技术学院
投递稿件请点这里:)
网页设计
HTML
XHTML
CSS
Javascript
Frontpage
Dreamweaver
图形图像
PhotoShop
FireWorks
Flash
Coreldraw
程序开发
PHP
ASP
.NET
JSP
CGI
XML
数据库
MySQL
Oracle
MSSQL
Access
综合应用
设计理论
建站系统
服务器管理
常用下载
办公应用
建站服务
如有建站意向,请尽快联系我们,以便安排时间...
QQ:4908220
作品展示
服务范围
服务流程
服务报价
联系方式
付款方式
站长论坛
注册
/
登陆
/
忘密?
交流区
站长酒吧
SEO&推广
网赚交流
建站系统
服务&信息
招聘求职
项目外包
广告发布
网络资源
技术区
网页设计师
界面设计师
WEB程序员
计算机应用
文章正文
» 您的当前位置:
首页
>>
学院
>>
程序开发
>>
XML
怎样快速从一个XML文件中查找信息
来源:
互联网
| 时间:2005-12-10 | 浏览:
相关评论
|
报告错误
|
发布文章
【字号:
大
|
中
|
小
】 【背景色
】
在网络时代,XML文件起到了一个保存和传输数据的作用。Soap协议通过Xml交流信息,数据库通过Xml文件存取等等。那么怎样快速的从一个XML文件中取得所需的信息呢?
我们知道,JAVA的JAXP中和Microsoft.Net都有Xml分析器,Microsoft.Net是边读边分析,而JAXP是读到内存中然后才进行分析(还有一种是事件机制去读),总而言之,是不利于快速读取。基于此,Microsoft.Net 和JAXP都提供了XPATH机制,来快速定位到XML文件中所需的节点。
例如有一个XML文件:booksort.xml:
<?xml version="1.0"?>
<!-- a fragment of a book store inventory database -->
<bookstore xmlns:bk="urn:samples">
<book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
<title>Pride And Prejudice</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>24.95</price>
</book>
<book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
<title>The Handmaid"s Tale</title>
<author>
<first-name>Margaret</first-name>
<last-name>Atwood</last-name>
</author>
<price>29.95</price>
</book>
<book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
<title>Emma</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>19.95</price>
</book>
<book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
<title>Sense and Sensibility</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>19.95</price>
</book>
</bookstore>
如果我们想快速查找”last-name”等于”Austen”的所有标题名,可以通过以下方法可以得到:
XmlReaderSample.cs
//Corelib.net/System.Xml.Xsl/XPathDocument Class
//Author :Any
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
public class XmlReaderSample
{
public static void Main()
{
XmlTextReader myxtreader = new XmlTextReader("booksort.xml");
XmlReader myxreader = myxtreader;
XPathDocument doc = new XPathDocument(myxreader);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("descendant::book[author/last-name="Austen"]");
//expr.AddSort("title", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);
XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current;
nav2.MoveToFirstChild();
Console.WriteLine("Book title: {0}", nav2.Value);
}
}
}
运行这个程序,结果为:
Book title: Pride And Prejudice
Book title: Emma
Book title: Sense and Sensibility
可以看到查找正确。
利用XPATH中的一些功能,也可以实现简单的排序和简单运算。如在数据库中经常要对数据进行汇总,就可用XPATH实现。
如:
order.xml
<!--Represents a customer order-->
<order>
<book ISBN="10-861003-324">
<title>The Handmaid"s Tale</title>
<price>19.95</price>
</book>
<cd ISBN="2-3631-4">
<title>Americana</title>
<price>16.95</price>
</cd>
</order>
和:books.xml
<?xml version="1.0"?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
<book cc="dd" xmlns:bk="urn:sample" xmlns:ns="http://www.Any.com" genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<ns:author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</ns:author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
我们可以对该XML文件中的price求和,以得到价格总数。
Evaluate.cs
//Corelib.net/System.Xml.Xsl/XPathNavigator Class
//Author :Any
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
public class EvaluateSample
{
public static void Main()
{
EvaluateSample myEvaluateSample = new EvaluateSample();
myEvaluateSample.test("books.xml");
}
public void test(String args)
{
try
{
//test Evaluate(String);
XPathDocument myXPathDocument = new XPathDocument(args);
XPathNavigator myXPathNavigator = myXPathDocument.CreateNavigator();
Console.WriteLine(myXPathNavigator.Evaluate("sum(descendant::book/price)"));
//testEvaluate(XPathExpression);
XmlDocument doc = new XmlDocument();
doc.Load("order.xml");
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr = nav.Compile("sum(//price/text())");
Console.WriteLine(nav.Evaluate(expr));
//testEvaluate(XPathExpression);
XPathNodeIterator myXPathNodeIterator = nav.Select("descendant::book/title");
expr = nav.Compile("sum(//price/text())");
Console.WriteLine(nav.Evaluate(expr,myXPathNodeIterator));
}
catch (Exception e)
{
Console.WriteLine ("Exception: {0}", e.ToString());
}
}
}
运行这个程序,结果如下:
30.97
36.9
36.9
我们可以看到,30.97是books.xml中所有price值的总和,而36.9则是order.xml中所有price值的总和。通过XPAH不仅可以快速查找信息,而且还可以对信息进行一些基本的处理。
上一篇:
使用javascript+xml实现分页
下一篇:
万维网创始人博客处女秀
我要投稿
打印本文
推荐本文
加入收藏
返回顶部
关闭窗口
09-30
采用XML和XSLT,使网页设计更紧密
04-22
XML文档搜索使用小结
04-22
简化XML处理详解
04-07
使用xml http为网站增加域名查询功能
03-16
在 Excel 2003 中创建 XML 映射
采用XML和XSLT,使网页设计更紧密
XML文档搜索使用小结
简化XML处理详解
使用xml http为网站增加域名查询...
采用ASP+XML方法打造个人留言本
初学者入门 JAVA 的 XML 编程实...
用PHP与XML联手进行网站编程
XML在B/S架构开发中的应用
xml常见问题
more..
» 相 关 评 论
验证码:
站长吧首页
-
网站运营
-
站长学院
-
SEO查询
-
站长论坛
-
建站服务
-
联系本站
-
广告/业务
©2005-2006 站长吧 Master8.NET All rights reserved 陕ICP备05010609号
九州未来科技提供服务器支持
| 网站空间 | 虚拟主机