zoukankan
html css js c++ java
XML篇查询语言XPath
XPath
• XPath(XML 路径语言)是用来查询和定位XML文档里的元素以及文本的一种通用查询方法。
• 许多人将XPath看作Internet的SQL语言。
• XPath语法使用称为表达式的模式。初始化时结果集中没有任何东西,利用XPath表达式使得出现在结果集里的节点形成特定的层次结构并符合一定的条件。
• XPath上下文:是我们将要查询文档的文档树中一个特定的节点。可以认为是查询的一个起始点。
XPath表达式
• 由位置步组成。它由一个轴、一个节点测试和可选择的一系列谓词构成。通过使用反斜杠连接多个位置步形成位置路径,产生一组节点作为结果。
• /Books/book/title:要求元素Books的子元素book的所有子元素title。
• /Books/book[@Price
<
21
.99]/title:返回Books根元素下book子元素中,所有Price属性值小于21.99的book的所有title子元素
• 位置步:表达式中由反斜杠分开的每个部分被称为一个位置步。
• 轴:是与上下文节点相对的文档的一部分,它定义了一组与当前节点有特定层次关系的节点。
• 节点测试:可以用来指示位置路径中一组合法节点的任何表达式。节点测试通过名字或类型筛选初始结果集。
– child::text():返回所有文本子节点。
• 谓词:true或false的一个表达式。
轴
• 轴心包括:self、child、parent、descendent、ancestor、attribute、namespace、following、preceding
• child::Customer:返回当前节点子元素中的所有Customer元素
• descendent::OrderItem:返回节点名为OrderItem“的所有后代
XPath表达式示例
• ./Order将找到当前上下文中名为Order的所有元素
• /Order将找到文档树中根下所有名为Order的元素
• //Order将在文档树的任何地方找到所有名为Order的元素,不管深度或层次结构
• child::book[attribute::publisher
=‘张三’]
• child::book[@publisher
=‘张三’]
• descendent::book[count(child::chapter)
>
5]:用
count函数检索所有chapter大于5的后代book节点
• child::book[start-with(attribute::publisher,’张’)]:使
用start-with函数检索所有publisher属性以’张’开头
的book子节点.
XPath缩略语法
• //代表后代轴
• @代表属性轴
• .代表自己
• ..代表父节点
所需查询的XML
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
Orders
>
<
Customer Name
=
'
Albert
'
>
<
Order Quantity
=
"
12
"
>
Roast Duck
</
Order
>
<
Order Quantity
=
"
5
"
>
Red Wine
</
Order
>
</
Customer
>
<
Customer Name
=
'
John
'
>
<
Order Quantity
=
"
3
"
>
French Fries
</
Order
>
<
Order Quantity
=
"
4
"
>
Coffee
</
Order
>
</
Customer
>
<
Customer Name
=
'
Stephen
'
>
<
Order Quantity
=
"
5
"
>
Milk
</
Order
>
</
Customer
>
<
Customer Name
=
'
Alice
'
>
<
Order Quantity
=
"
18
"
>
Frozen Pizza
</
Order
>
<
Order Quantity
=
"
3
"
>
Potato Chips
</
Order
>
</
Customer
>
</
Orders
>
程序:
protected
void
Page_Load(
object
sender, EventArgs e)
{
XmlDocument xmlDocument
=
new
XmlDocument();
//
Load Xml
xmlDocument.Load(Server.MapPath(
"
Test.xml
"
));
//
查询Name为A开头的节点
XmlNodeList xmlNodeList
=
xmlDocument.DocumentElement.SelectNodes(
"
//Customer[starts-with(@Name,'A')]/Order
"
);
//
总共找到几个Node
Response.Write(
"
Found:
"
+
xmlNodeList.Count.ToString()
+
"
node<br>
"
);
foreach
(XmlNode xmlNode
in
xmlNodeList)
{
//
取得Name节点的Value
string
parentNodeAttribute
=
xmlNode.ParentNode.Attributes.GetNamedItem(
"
Name
"
).Value;
//
取得Quantity的Value
string
elementAttribute
=
xmlNode.Attributes.GetNamedItem(
"
Quantity
"
).Value;
//
显示
Response.Write(
"
Customer Name:
"
+
parentNodeAttribute
+
"
Ordered Quantity:
"
+
elementAttribute
+
""
+
xmlNode.InnerText
+
"
<br>
"
);
}
}
查看全文
相关阅读:
关于Cocos2d-x开发一个游戏的过程自述
关于JDK环境变量的配置问题
lnmp、lamp、lnmpa一键安装包(Updated: 2015-10-25)
成大事者必备的九种能力、九种手段、九种心态
燕十八mysql笔记
cmake 安装 mysql5.5 版本
IOS 中微信 网页授权报 key[也就是code]失效 解决办法
js 复制 功能
php 二维数组排序
php获取前一天,前一个月,前一年的时间
原文地址:https://www.cnblogs.com/RuiLei/p/647603.html
最新文章
4.8 this关键字
Markdown 语法大全
Linux的缓存内存 Cache Memory详解
How many virtual users do I need? 计算需要的vuser
nginx状态监控
解读Web Page Diagnostics网页细分图
LR的响应时间与使用IE所感受时间不一致的讨论(摘抄补充)
Loadrunner_http长连接设置
[转]性能测试之性能计数器和监测工具
[转]如何调整压力测试工具
热门文章
通过/proc/sys/net/ipv4/优化Linux下网络性能
Linxu内核参数详解
关于Unity中的.meta文件
关于Unity屏幕分辨率的比例
关于跨平台的理解以及Unity的由来--Unity学习
关于VS2013的安装遇到的问题
关于Unity5.5中2D动画的制作
关于Unity5.5中固定刚体旋转的方法
关于Cocos2d-x中两个场景之间参数的传递
关于Cocos2d-x中自定义的调用注意事项
Copyright © 2011-2022 走看看