⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0403-0300.htm

📁 介绍了xml相关技术和应用范围,适合初学者.
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0403-0300 -->
<HTML><HEAD><TITLE>XML中国论坛 - 初学进阶 - 4.3.3 节点匹配路径XPath</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
	FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt9 {
	FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt10 {
	FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋体"
}
.TempOutline {
	FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.TempOutline1 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline {
	FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline1 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline11 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage0 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage1 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage11 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage111 {
	FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
</STYLE>



<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0 
onload=""><!-- 以下为主体内容 -->
<div align="center">
  <center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
  <TBODY>
  <TR vAlign=top>
    <TD width=32 rowSpan=2></TD>
    <TD vAlign=center width=515>
    <p align="center"><IMG height=33 
      src="image/title_learner.gif" width=226></TD>
    <TD width=39 rowSpan=2></TD>
    </TR>
  <TR vAlign=top>
    <TD width="515" ><!-- 正文内容 -->
      <DIV class=pt10><B>4.3.3 节点匹配路径XPath</B></DIV>
   &nbsp;&nbsp;&nbsp;
      <DIV></DIV><BR>
      <DIV class=pt9>
      <P>从上面的例子可以看出,在利用XSL进行转换的过程中,匹配的概念非常重要。在模板声明语句xsl:template match = 
      ""和模板应用语句xsl:apply-templates select = 
      ""中,用引号括起来的部分必须能够精确地定位节点。具体的定位方法则在XPath中给出。</P>
      <P>之所以要在XSL中引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路径:通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节点,显然这对XSLT来说是一个最最基本的功能。</P>
      <P>不过,由于XPath可应用于不止一个的标准,因此W3C将其独立出来作为XSLT的配套标准颁布,它是XSLT以及我们后面要讲到的XPointer的重要组成部分。</P>
      <P>在介绍XPath的匹配规则之前,我们先来看一些有关XPath的基本概念。</P>
      <P>首先要说的是XPath数据类型。XPath可分为四种数据类型: 
      <OL>
        <LI><STRONG>节点集(node-set)<BR></STRONG>节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。 

        <LI><STRONG>布尔值(boolean)<BR></STRONG>由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和false两个值。布尔值可以和数值类型、字符串类型相互转换。 

        <LI><STRONG>字符串(string)<BR></STRONG>字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。 

        <LI><STRONG>数值(number)<BR></STRONG>在XPath中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。 
        </LI></OL>
      <P>其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。</P>
      <P>另外,由于XPath包含的是对文档结构树的一系列操作,因此搞清楚XPath节点类型也是很必要的。回忆一下第二章中讲到的XML文档的逻辑结构,一个XML文件可以包含元素、CDATA、注释、处理指令等逻辑要素,其中元素还可以包含属性,并可以利用属性来定义命名空间。相应地,在XPath中,将节点划分为七种节点类型: 

      <OL>
        <LI><STRONG>根节点(Root 
        Node)<BR></STRONG>根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根节点开始。 

        <LI><STRONG>元素节点(Element 
        Nodes)<BR></STRONG>元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。<BR>元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是本地的命名。 

        <LI><STRONG>文本节点(Text 
        Nodes)<BR></STRONG>文本节点包含了一组字符数据,即CDATA中包含的字符。任何一个文本节点都不会有紧邻的兄弟文本节点,而且文本节点没有扩展名。 

        <LI><STRONG>属性节点(Attribute 
        Nodes)<BR></STRONG>每一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。这就是说,通过查找元素的子节点可以匹配出元素的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也就是说不同的元素节点不共有同一个属性节点。<BR>对缺省属性的处理等同于定义了的属性。如果一个属性是在DTD声明的,但声明为#IMPLIED,而该属性没有在元素中定义,则该元素的属性节点集中不包含该属性。<BR>此外,与属性相对应的属性节点都没有命名空间的声明。命名空间属性对应着另一种类型的节点。 

        <LI><STRONG>命名空间节点(Namespace 
        Nodes)<BR></STRONG>每一个元素节点都有一个相关的命名空间节点集。在XML文档中,命名空间是通过保留属性声明的,因此,在XPath中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。 

        <LI><STRONG>处理指令节点(Processing Instruction 
        Nodes)<BR></STRONG>处理指令节点对应于XML文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。 

        <LI><STRONG>注释节点(Comment Nodes)<BR></STRONG>注释节点对应于文档中的注释。<BR></LI></OL>
      <P>下面,我们来构造一棵XML文档树,作为后面举例的依托:</P>
      <DIV align=center>
      <CENTER>
      <TABLE width="80%" border=1>
        <TBODY>
        <TR>
          <TD width="100%">&lt;A id="a1"&gt;<BR>&nbsp; &lt;B 
            id="b1"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;C 
            id="c1"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;B 
            name="b"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;D 
            id="d1"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;E 
            id="e1"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;E 
            id="e2"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/C&gt;<BR>&nbsp; 
            &lt;/B&gt;<BR>&nbsp; &lt;B id="b2"/&gt;<BR>&nbsp; &lt;C 
            id="c2"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;B/&gt;<BR>&nbsp;&nbsp;&nbsp; 
            &lt;D id="d2"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;F/&gt;<BR>&nbsp; 
            &lt;/C&gt;<BR>&nbsp; 
      &lt;E/&gt;<BR>&lt;/A&gt;</TD></TR></TBODY></TABLE></CENTER></DIV>
      <P>现在,我们就来介绍一些XPath中节点匹配的基本方法。 
      <OL>
        <LI><STRONG>路径匹配</STRONG><BR>路径匹配与文件路径的表示相仿,比较好理解。有以下几个符号:<BR>
        <TABLE width="90%" border=1>
          <TBODY>
          <TR>
            <TD align=middle width="10%"><STRONG>符&nbsp; 号</STRONG></TD>
            <TD align=middle width="30%"><STRONG>含&nbsp; 义</STRONG></TD>
            <TD align=middle width="15%"><STRONG>举&nbsp; 例</STRONG></TD>
            <TD align=middle width="55%"><STRONG>匹配结果</STRONG></TD></TR>
          <TR>
            <TD align=middle width="10%" rowSpan=2>/</TD>
            <TD width="30%" rowSpan=2>指示节点路径</TD>
            <TD width="15%">/A/C/D</TD>
            <TD width="55%">节点"A"的子节点"C"的子节点"D",即id值为d2的D节点</TD></TR>
          <TR>
            <TD width="15%">/</TD>
            <TD width="55%">根节点</TD></TR>
          <TR>
            <TD align=middle width="10%" rowSpan=2>//</TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -