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>
"
);
}
}
查看全文
相关阅读:
一个很棒的DiabloII研究站:)
跳票了?又跳了!
羊皮卷的实践第二十四章
羊皮卷的实践第二十六章
羊皮卷的实践第二十五章
Timer的控件使用
英语名言名句集锦
Passwordstrength控件
羊皮卷的实践第二十三章
羊皮卷的实践第二十二章
原文地址:https://www.cnblogs.com/RuiLei/p/647603.html
最新文章
HP 520 双系统 vista xp
cpu和操作系统的几种模式。
hibernate manytoone 测试
Eclipse formatter格式化插件
.net JSON组件 JSON.net (Newtonsoft.json.dll)
SWT控件
Eclipse 启动参数
java Calendar
java的范型约束
java正则表达式
热门文章
Java Charset, getBytes()
java Enum示例
CEGUI 第三弹
今天我离开了工作四年的大宇
CEGUI 第一弹
看到碟摊上有D版的《阿猫阿狗2》
My lover: silenthill
《古墓丽影7 传奇》
CEGUI 第二弹
阿雅走了
Copyright © 2011-2022 走看看