📄 0703-0200.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0703-0200 -->
<HTML><HEAD><TITLE>XML中国论坛 - 初学进阶 - 7.3.2 XPointer形式</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=40 rowSpan=2></TD>
<TD vAlign=center>
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=40 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD ><!-- 正文内容 -->
<DIV class=pt10><B>7.3.2 XPointer形式</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>XPointer有三种形式用于标识片断:完整形式(Full XPointers)、无修饰名称(bare names)或子节点序列(child
Sequences)。下面我们来一一讲述:
<OL>
<LI><STRONG>完整形式</STRONG> </LI></OL>
<P>完整形式的XPointer可以包括由一个或多个XPointer部分(XPointer
Part),各个部分间可以由空格分开,也可以没有分隔符。每个XPointer部分用"xpointer"打头,其后跟一个表达式,表示根据此表达式进行定位计算。包含多个部分的XPointer是从左至右逐个部分计算,首先计算第一部分,如果第一个XPointer部分运算失败,将运算第二个XPointer部分,直至得到运算结果或处理完所有的部分。</P>
<P>例如下面的第一个例子选取文件中的根元素spec的所有body子元素,第二个例子选取文件中的第2个language元素,第三个例子表示选取文件中id="
_loc"的元素,第四个例子表示首先选取文件中id="_loc"的元素,如果不存在则选取文件中id="_LOC"的元素。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD
width="100%">xpointer(/child::spec/child::body)<BR>xpointer(descendant::language[position()=2])<BR>xpointer(id("_loc
"))<BR>xpointer(id("_loc "))
xpointer(id("_LOC"))</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>在利用XPointer进行文件内部定位时,所使用的文件是已经确定的,如何指定文件是由XLink而不是XPointer所决定。例如在下面的例子中,首先指定了文件为"http://www.xlinksample.com/xpointer.xml",然后再在该文件中寻找需要的元素。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><LINK xmlns:xlink =
"http://www.w3.org/TR/1999/xlink"<BR>
xlink:type = "simple"<BR> xlink:href
="http://www.xlinksample.com/xpointer.xml<BR>
#xpointer(/child::*[position()=1]"><BR></LINK></TD></TR></TBODY></TABLE></CENTER></DIV>
<OL>
<LI type=disc value=2><STRONG>无修饰名称</STRONG> </LI></OL>
<P>在上面的第三个例子中,利用id()进行元素定位,表示文件中ID等于指定常数的元素,因为这种定位方式很常见,XPointer语言提供了一种简写方式,可以将xpointer(id(name))简写成name。例如:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD
width="100%">http://www.xlinksample.com/xpointer.xml#xpointer(id("_loc"))</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>可以简写为</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD
width="100%">http://www.xlinksample.com/xpointer.xml#_loc</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>可以看出,这种表示法与HTML中完全相同。使用这种简写方式有两个好处:首先,它鼓励人们使用ID属性标识元素,从而在文件结构发生变化时链接不会失效。其次,它提供了与HTML的兼容性。但是,这种写法与HTML有着相同的问题,它仍然要求必须同时控制开始文件和目标文件,因此选取何种形式取决于具体的应用。
<OL>
<LI type=disc value=3><STRONG>子节点序列</STRONG> </LI></OL>
<P>子节点序列是由一系列数字和"/"组成的序列,其中"/"用于分隔数字,数字n表示前面定位元素的第n个直接子元素,是"child::*[position()=n]"的简写。子节点序列不考虑元素的名称和类型,在序列前可以是刚才提到的无修饰名称,表示从ID属性为指定名称的元素开始定位,否则数字序列必须以"/1"打头,表示文件的根元素。文件中的其他节点,如属性、注释等,不能用子节点序列定位,由于文件的根节点没有父节点,因此也不能用子节点序列定位。</P>
<P>请注意,文件的根节点和根元素不是同一个概念。根节点是一个包含整个文件的抽象节点,包括XML声明、DTD、处理指令(PI)等,而根元素是文件中最外层的元素,它是根节点的直接子元素。根节点用"/"表示,而根元素用"/1"表示。如果用一棵树表示XML文件,根节点和根元素的关系可以表示如下图,为了清晰起见,图中没有把根节点的其他子节点和根元素的子节点画出。</P><FONT
face=宋体 size=3>
<P align=center><IMG height=113
src="image/TU000000-0703-0200-01.gif" width=203></FONT></P>
<P><BR>下例表示根元素的第4个子元素包含的第5个子元素:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">#/1/4/5</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>如果用完整形式表示,应该是:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD
width="100%">#xpointer(/child::*[position()=1]/child::*[position()=4]/child::*[position()=5])</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>下面例子表示id="_loc"元素的第3个子元素内的第2个子元素。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">#_loc/3/2</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>同样可以用完整形式表示为:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD
width="100%">#xpointer(id("_loc")/child::*[position()=3]/child::*[position()=2])</TD></TR></TBODY></TABLE></CENTER></DIV>
<P> </P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -