﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我思故我强-文章分类-XML</title><link>http://www.blogjava.net/balajinima/category/26964.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 30 Oct 2007 15:35:55 GMT</lastBuildDate><pubDate>Tue, 30 Oct 2007 15:35:55 GMT</pubDate><ttl>60</ttl><item><title>XPath 语法</title><link>http://www.blogjava.net/balajinima/articles/146086.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Tue, 18 Sep 2007 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/146086.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/146086.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/146086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/146086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/146086.html</trackback:ping><description><![CDATA[
		<div id="intro">
				<p>
						<strong>XPath使用路径表达式来选取XML文档中的节点或节点集。节点是通过沿着某个路径(path)或者步(step)来选取的。</strong>
				</p>
		</div>
		<div>
				<h3>XML实例文档</h3>
				<p>我们将在下面的例子中使用这个XML文档。</p>
				<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;

&lt;bookstore&gt;

&lt;book&gt;
  &lt;title lang="eng"&gt;Harry Potter&lt;/title&gt;
  &lt;price&gt;29.99&lt;/price&gt;
&lt;/book&gt;

&lt;book&gt;
  &lt;title lang="eng"&gt;Learning XML&lt;/title&gt;
  &lt;price&gt;39.95&lt;/price&gt;
&lt;/book&gt;

&lt;/bookstore&gt;</pre>
		</div>
		<div>
				<h3>选取节点</h3>
				<p>XPath使用路径表达式在XML文档中选取节点。节点是通过沿着某个路径或者step来选取的。</p>
				<h4>下面列出了最有用的路径表达式：</h4>
				<table class="dataintable">
						<tbody>
								<tr>
										<th>表达式</th>
										<th>描述</th>
								</tr>
								<tr>
										<td>nodename</td>
										<td>选取此节点的所有子节点</td>
								</tr>
								<tr>
										<td>/</td>
										<td>从根节点选取</td>
								</tr>
								<tr>
										<td>//</td>
										<td>从匹配选择的当前节点选择文档中的节点，而不考虑它们的位置</td>
								</tr>
								<tr>
										<td>.</td>
										<td>选取当前节点</td>
								</tr>
								<tr>
										<td>..</td>
										<td>选取当前节点的父节点</td>
								</tr>
								<tr>
										<td>@</td>
										<td>选取属性</td>
								</tr>
						</tbody>
				</table>
				<h4>实例</h4>
				<p>在下面的表格中，我们已列出了一些路径表达式以及表达式的结果：</p>
				<table class="dataintable">
						<tbody>
								<tr>
										<th>路径表达式</th>
										<th>结果</th>
								</tr>
								<tr>
										<td>bookstore</td>
										<td>选取bookstore元素的所有子节点</td>
								</tr>
								<tr>
										<td>/bookstore</td>
										<td>
												<p>选取bookstore根元素</p>
												<p>注释：假如路径起始于正斜杠( / )，则此路径为到某元素的绝对路径！</p>
										</td>
								</tr>
								<tr>
										<td>bookstore/book</td>
										<td>选取所有属于bookstore的子元素的book元素。</td>
								</tr>
								<tr>
										<td>//book</td>
										<td>选取所有book子元素，而不管它们在文档中的位置。</td>
								</tr>
								<tr>
										<td>bookstore//book</td>
										<td>选择所有属于bookstore元素的后代的book元素，而不管它们位于bookstore之下的什么位置。</td>
								</tr>
								<tr>
										<td>//@lang</td>
										<td>选取所有名为lang的属性。</td>
								</tr>
						</tbody>
				</table>
		</div>
		<div>
				<h3>谓语（Predicates）</h3>
				<p>谓语用来查找某个特定的节点或者包含某个指定的值的节点。</p>
				<p>谓语被嵌在方括号中。</p>
				<h4>实例</h4>
				<p>在下面的表格中，我们列出了带有谓语的一些路径表达式，以及表达式的结果：</p>
				<table class="dataintable">
						<tbody>
								<tr>
										<th>路径表达式</th>
										<th>结果</th>
								</tr>
								<tr>
										<td>/bookstore/book[1]</td>
										<td>选取属于bookstore子元素的第一个book元素。</td>
								</tr>
								<tr>
										<td>/bookstore/book[last()]</td>
										<td>选取属于bookstore子元素的最后一个book元素。</td>
								</tr>
								<tr>
										<td>/bookstore/book[last()-1]</td>
										<td>选取属于bookstore子元素的倒数第二个book元素。</td>
								</tr>
								<tr>
										<td>/bookstore/book[position()&lt;3]</td>
										<td>选取最前面的两个属于bookstore元素的子元素的book元素。</td>
								</tr>
								<tr>
										<td>//title[@lang]</td>
										<td>选取所有拥有名为lang的属性的title元素。</td>
								</tr>
								<tr>
										<td>//title[@lang='eng']</td>
										<td>选取所有title元素，且这些元素拥有值为eng的lang属性。</td>
								</tr>
								<tr>
										<td>/bookstore/book[price&gt;35.00]</td>
										<td>选取所有bookstore元素的book元素，且其中的price元素的值须大于35.00。</td>
								</tr>
								<tr>
										<td>/bookstore/book[price&gt;35.00]/title</td>
										<td>选取所有bookstore元素中的book元素的title元素，且其中的price元素的值须大于35.00。</td>
								</tr>
						</tbody>
				</table>
		</div>
		<div>
				<h3>选取未知节点</h3>
				<p>XPath通配符可用来选取未知的XML元素。</p>
				<table class="dataintable">
						<tbody>
								<tr>
										<th>通配符</th>
										<th>描述</th>
								</tr>
								<tr>
										<td>*</td>
										<td>匹配任何元素节点</td>
								</tr>
								<tr>
										<td>@*</td>
										<td>匹配任何属性节点</td>
								</tr>
								<tr>
										<td>node()</td>
										<td>匹配任何类型的节点</td>
								</tr>
						</tbody>
				</table>
				<h4>实例</h4>
				<p>在下面的表格中，我们列出了一些路径表达式，以及这些表达式的结果：</p>
				<table class="dataintable">
						<tbody>
								<tr>
										<th>路径表达式</th>
										<th>结果</th>
								</tr>
								<tr>
										<td>/bookstore/*</td>
										<td>选取bookstore元素的所有子节点</td>
								</tr>
								<tr>
										<td>//*</td>
										<td>选取文档中的所有元素</td>
								</tr>
								<tr>
										<td>//title[@*]</td>
										<td>选取所有带有属性的title元素。</td>
								</tr>
						</tbody>
				</table>
		</div>
		<div>
				<h3>选取若干路径</h3>
				<p>通过在路径表达式中使用“|”运算符，您可以使用选取若干个路径。</p>
				<h4>实例</h4>
				<p>在下面的表格中，我们列出了一些路径表达式，以及这些表达式的结果：</p>
				<table class="dataintable">
						<tbody>
								<tr>
										<th>路径表达式</th>
										<th>结果</th>
								</tr>
								<tr>
										<td>//book/title | //book/price</td>
										<td>选取所有book元素的tilte和price元素。</td>
								</tr>
								<tr>
										<td>//title | //price</td>
										<td>选取所有文档中的title和price元素。</td>
								</tr>
								<tr>
										<td>/bookstore/book/title | //price</td>
										<td>选取所有属于bookstore元素的book元素的title元素，以及文档中所有的price元素。</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.blogjava.net/balajinima/aggbug/146086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2007-09-18 10:38 <a href="http://www.blogjava.net/balajinima/articles/146086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>