All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
对于本专栏,我假设您已经对,Web,部件的基本知识有所了解,例如,如何使用,WebPartMana_[Asp.Net教程]
整理:Apache+MySql+PHP的快速安装_php资料_编程技术
使用,BasePage,来解决,GridView,执行,RenderControl,产生的错误_[Asp.Net教程]
C#入门代码_[Asp.Net教程]
使用C#在进度条中显示复制文件的进度_[Asp.Net教程]
实例:ASP.NET遍历配置文件的连接字符串_.net资料_编程技术
让php5在win2003 X64 下运行的方法_[PHP教程]
在ASP.NET2.0中创建Web应用程序主题_[Asp.Net教程]
用Ajax和RSS制作一个首页新闻_[AJAX教程]
asp.net,2.0下用access开发的时候要注意的问题_[Asp.Net教程]
Reading number is top 10 pictures
生活中总有些低调的人,不经意间散发出土豪的气质
Catch prostitution woman in China
Sora aoi after swimming
The little girl with long hair1
黑社会大哥相亲
China's first snake village3
A cat have life principles
So beauty, will let you spray blood3
迷人的靓女
Perfect small Laurie2
Download software ranking
豪门浪荡史
功夫熊猫2(上集)
Tram sex maniac 2 (H) rar bag7
Professional killers2 for Android
Kung fu panda - the secret of the teacher
双旗镇刀客B
传奇私服架设教程-chm
asp.netWeb服务器高级编程
软件工程思想
实战黑客不求人













  说明:


  1.[ ] ── 表示选择条件,只有满足条件的个人简历才被显示。


  2.any ── 由于每个人有多种技能,故加any作为前缀,以使每个人所有技能都能被比较。


  3.skill='WEB开发' ── 筛选条件。


  示例二、


  仍上面的XML文档为例,如果欲选择1977/1/1之前出生的人的姓名、技能与E-Mail,相应的XSL文档结构如下(假定生日格式为yyyy/mm/dd):



























  说明:


  1.birthday lt '1977/1/1' ── 搜索条件,在此处使用"< "会错误,故使用"lt"表示小于。


  2.skill [0] ── 表示选择skill的第一项。


  3.skill [index()>0] ── 表示选择skill的第二项以后(包括第二项)的项目。


  4.xsl:value-of select="." ── 表示选择当前标记的值。


  相信大家应该注意到,在前面以及本次的例子中出现了一些函数,如index()、formatIndex()、childNumber(),也许大家还不完全明了其中的含义吧?敬请关注下一课。


  本期学习XSL样式方法,即可用于XSL元素的select属性、的match属性、的test属性中,对元素的范围进行筛选,从而提供更大的灵活性。



  XML与DHTML(动态HTML)一样,这些节点都是一个个对象,而且这些对象都是有层次的,从根节点开始构成一颗层次清淅的树状结构,这就形成了文档对象模型DOM(Document Object Model),通过对象的属性、方法来达到访问控制XML节点的目的。



  我们这里不打算就XML的DOM逐一详细阐述,因为这完全可以写成一个篇幅较多的教程,我们先就一些常见的方法作一些讨论,以期对DOM的对象方法有一个大致的了解。


  注:从本期开始,所有示例不再提供完整源代码,如有不明白之处,请仔细阅读前面七期、并动手练手。


  一、end()


  含义:返回集合中最后一个元素。


  示例:输出最后一份简历


  假定XML文件格式为:


………………


  相应XSL文件内容为:


……


  或:


……


  或:


……


  二、index()


  含义:返回该元素在集合中的位置,返回值是一整数,其中第一个元素返回0。


  示例:返回前面三份简历。


resume[index()le3]


  注意:index()是与父元素相关的,请看下例:










  返回所有中的第一个


x/y[index()=0] 或x/y[0]


  三、nodeName()


  含义:返回元素的名字,即标记名。


  示例:选择任意元素,假如其名字(即标记名)等于"name":


*[nodeName()='name'] 或 *[name]


  四、number()


  含义:将值转换为数值形式,如果不是数值则返回空,要求参数。


  示例:年龄(age)小于30岁的人的简历(resume):


resume[number(age)lt30] 或 resume[agelt30]


  五、nodeType()


  含义:返回结点类型,结果为是数值。以下是返回值列表:



结点类型
结点类型值
结点的字符形式描述
Element
1
'element'
Element Attribute
2
'attribute'
Markup-Delimited Region of Text
3
'text'
Processing Instruction
7
'processing_instruction'
Comment
8
'comment'
Document Entity
9
'document'


  六、value()


  含义:返回元素或属性的值。


  示例:value()是元素或属性的缺省方法,以下表示是等价:


name!value()="NAME" 与 name="NAME"

@attr="attribute_value" 与 @attr="attribute_value"


  注:@是属性前缀,@attr表示是属性attr


  七、attribute()


  含义:返回所有属性结点的集合,等价于"@*"。


  示例:寻找所有的resume元素,满足条件至少有一个属性的值为"ABC":


resume[anyattribute()='ABC'] 或 resume[any@*='ABC']


  寻找所有的resume元素,满足条件至少有一个子元素有一个属性的值为"ABC":


resume[any*/attribute()='ABC'] 或 resume[any*/@*='ABC']


  八、comment()


  含义:返回所有注释结点。


  示例:


resume[anycomment()='禹希初的简历']


  表示寻找含有注释语句:
元素。


  九、cdata()


  含义:返回所有CDATA类型的结点的集合。


  示例:


resume[anycdata()='禹希初的简历']


  表示寻找含有下述语句(必须是直接子结点)元素。


  十、node()


  含义:返回当前上下文环境中除根结点和属性结点以外的所有结点的集合,等价于:


"*|pi()|comment()|text()"


  示例:寻找所有元素resume,其最后一个结点的名字为"skill":


resume[node()[end()]!nodeName()='skill']


  寻找所有resume元素的第一个结点:resume/node()[0]。


  十一、textnode()


  含义:返回所有文本类型的结点的集合。


  示例:寻找每一个p元素的第二个文本结点:


p/textnode(1) 或 p!textnode(1)


  十二、text()


  含义:返回所有表示文本字符串的结点的集合,等价于"cdata()|textnode()"。


  本期的内容就介绍至此,另有一个函数date()在本人的机器上一试就发生错误使浏览器自动关闭,还有一个函数pi()本人尚未找到适当的应用方法,就不介绍了,下期将讲述如何XSL中使用脚本。


  有时,我们可能会希望XML文档输出时能对其中内容加上一些统计信息或者如编号什么的,利用前面的知识就不太容易实现了。今天将介绍两个新元素,使我们能轻松处理这个难题。



  含义:计算脚本表达式,输出一个文本字符串。


  语法:



  属性:


  language ── 规定所用脚本语言的名字,可用的属性有"JavaScript"、"JScript"、"VBScript"、"VBS"等,缺省为"JScript"。



  含义:声明全局变量或定义函数。


  语法:



  属性:同



  示例:


  不知大家对于第四期《跟我学XML》中的例子是否还有印象?其中的XML文档并没有对简历编号,但输出中却加上了大写的罗马数字序号。今天将再举一稍为复杂一些的例子:


  假如我们编写一份年终生产统计表,其中需要小计一项,常规的作法是事先将其算出来,现在不必了,我们可以只给出单项统计,显示时再统计小计一项。请找出《跟我学XML》的第四期,XML文件不必修改,对XSL文件的修改如下:






1999年生产统计





1999年生产统计












小计


total(this,"q1")


total(this,"q2")


total(this,"q3")


total(this,"q4")








function total(node,q)
{
  temp=0;
  mark='/document/report/'+q;
  v=node.selectNodes(mark);
  for(t=v.nextNode();t;t=v.nextNode())
  {
    temp+=Number(t.text);
  }
  return temp; //小计值
}





























color:red






onmouseup="" oncontextmenu="" onmousemove="" onselectstart="" onmousedown="" ondrag="" ondragstart="" onbeforecopy="" oncopy="" align=center onselect>onmouseup="" oncontextmenu="" onmousemove="" onselectstart="" onmousedown="" ondrag="" ondragstart="" onbeforecopy="" oncopy="" alt=XSL学习教程:运算符和函数 src="http://www.webjx.com/upfiles/20070915/20070915201257_01.gif" onselect>
上例在浏览器中的样子(IE5.0或更新版本)


  说明:


  注意到执行结果的变化了吗?黑体部分为添加部分,注意添加部分分为两部分,必须置于
之后,切记。


  selectNodes() ── 是XMLDOMObject的一个方法,返回文档中所有满足条件的结点的集合,条件与< xsl:for-each >和select属性的取值采用同样的写法,可以加筛选、下标等限制,如寻找一季度产量大于等于50的班组:


/document/report/q1[value() ge 50]


  以上写法还有一个更简单的写法:


//q1[value()ge50]


  //表示从根结点出发遍历所有结点,寻找满足条件的结点,如果文档内有同名但意义不同的结点则不能用此种方法,非不得已不建议使用。以此为例,如果希望统计年总产量,则可以下述字符串寻找结点(建议使用最后一种,此种描述将精确找到需要汇总的数据):


//*[value()gt0] 或 //(q1|q2|q3|q4) 或 /document/report/(q1|q2|q3|q4)


  nextNode() ── 返回结点集中的下一个结点


  Number() ── 将提供的参数转换为数值



  下期介绍XSL函数2,用于中,以及的expr属性。建议读者熟悉JavaScript、JScript、VBScript中至少一种,否你能用XSL完成的工作将十分有限。由于篇幅关系,此处不作详细介绍。


  本期介绍多个XSL对于VBScript、JScript增加的方法、属性,以充分发挥XML的优势,用于标记内表达式的编写或的expr属性。



  一、absoluteChildNumber


  含义:返回结点相对于它所有的兄弟(不论名字是否相同)的序号。


  语法:absoluteChildNumber(node)


  参数:node ── 对象,欲返回编号的结点。


  示例:


  1、假定文档结构为:,其中document为顶层结点,下述表达式将输出:



absoluteChildNumber(this.selectNodes('/document/body').item(0))


  2、确定当前结点相对于其所有兄弟的序号:



absoluteChildNumber(this)


  二、ancestorChildNumber


  含义:从给定结点出发根据给定祖先结点名返回最近的祖先结点的序号(相对于同名结点)。如果找不祖先,则返回0。


  语法:ancestorChildNumber(bstrNodeName, pNode)


  参数:


  bstrNodeName ── 字符串。被搜索的祖先结点的名字。


  pNode ── 对象。搜索开始位置的结点。


  示例查找当前结点最近的名为report祖先结点:


ancestorChildNumber('report',this)


  三、attributes


  含义:返回结点属性的集合。


  语法:object.attributes


  参数:object ── 结点对象。


  示例:当前结点属性的个数


this.attributes.length


  当前结点第三个属性的值


this.attributs.item(2).value




this.attributes.item(2).text




this.attributes(2).text


  注意:如果给定的下标大于属性总和减1将出错,第一个属性的下标是0。


  四、baseName


  含义:返回有名字空间限制的基本名,即不包括名字前缀。


  语法:object.baseName


  参数:object ── 结点对象


  示例,当前结点的基本名:

this.baseName


  五、childNumber


  含义:返回结点相对于同名同胞的序号。


  语法:childNumber(object)


  参数:object ── 结点对象


  示例,假定XML文档结构如下:



  如果当前结点是z,则childNumber(this)返回1,而absoluteChildNumber(this)返回3。


  六、dataType


  含义:设定或读取结点的数据类型。


  语法:设定结点的数据类型 object.dataType=objValue
     读取结点的数据类型 objValue=object.dataType


  参数:object ── 结点对象。

  示例,读取当前结点的数据类型:


dtType=this.dataType


  七、depth


  含义:指定结点出现在文档树上的深度,即该结点位于文档第几层,顶层结点位于第一层,根结点(即用"/"表示的结点)位于第0层。


  语法:depth(pNode)


  参数:pNode ── 结点对象


  示例,当前结点的深度:


depth(this)


  八、firstChild、lastChild


  含义:返回结点的第一个子结点(或最后一个子结点)。


  语法:pNode.firstChild
     pNode.lastChild


  参数:pNode ── 结点对象


  示例,当前结点的第一个结点的名字:


this.firstChild.nodeName


  九、formatIndex


  含义:用指定的计数系统格式化提供的整数。


  语法:formatIndex(lIndex, bstrFormat)


  参数:


  lIndex ── 整型数值或变量


  bstrFormat ── 数据格式,可选值有a、A、i、I、1、01(以0打头的数值形式,如果要求固定长度的编号如0001、0002则非常有用)。


  示例,当前结点的大写罗马数字编号:


formatIndex(childNumber(this),'I')


  十、formatNumber


  含义:以指定格式输出数值。


  语法:formatNumber(dblNumber, bstrFormat)


  参数:说明同formatNumber,不同之处在于格式化的可以是小数。


  示例,对变量a的值格式化为两位小数:

formatNumber(a,'#.00'):


  十一、hasChildNodes


  含义:如果结点有子结点则返回true(-1),否则为false(0)。


  语法:pNode.hasChildNodes()


  注意:与此前介绍的函数不同,此函数后必须带一个空括号。


  示例,判断当前结点是否有子结点:


this.hasChildNodes


  十二、namespaceURI、prefix


  含义:返回结点名字空间的全局资源标识符(或前缀)。


  语法:pNode.namespaceURI
     pNode.prifix


  十三、nextSibling、previousSibling、parentNode


  含义:返回结点的下一个兄弟(或前一个兄弟、或结点的父结点)。


  语法:pNode.nextSibling
     pNode.previousSibling
     pNode.parentNode


  注意:对根结点(即"/")应用parentNode方法、对第一个孩子结点应用previousSibling方法、对最后一个孩子结点应用nextSibling方法均会导致错误,可通过此过关系运算符==(等于)和!=(不等于)来判断一个结点是否某一指定结点,格式为pNode1 = pNode2或pNode2 != pNode2。


  十四、nodeName


  含义:返回元素、属性、入口的名字或其他类型结点的一个特定字符串。


  语法:pNode.nodeName


  示例,当前结点的名字:


this.nodeName


  十五、nodeType、NodeTypeString


  含义:返回结点的类型的数值形式(或字符串形式)。

  语法:pNode.nodeType 或 pNode.nodeTypeString


  返回值:



结点类型
结点类型值
结点的字符形式描述
Element
1
'element'
Element Attribute
2
'attribute'
Markup-Delimited Region of Text
3
'text'
Processing Instruction
7
'processing_instruction'
Comment
8
'comment'
Document Entity
9
'document'


  十六、nodeTypedValue


  含义:以结点预定义的数据类型返回结点的值。


  语法:pNode.nodeTypedValue


  示例,假定当前结点的数据类型是fixed.14.4,下例将以数值返回结点的值,而不是文本一个字符串:


this.nodeTypedValue


  十七、nodeValue


  含义:返回结点的文本。


  语法:pNode.nodeValue


  注意:该方法不用于元素类结点,可用于属性、CDATA、注释、文本等结点。


  示例,当前元素第一个属性的值:


this.attributes(0).nodeValue


  当前元素内的文本(假定该元素内只有文本,无其它元素,即text,建议多尝几次掌握其确切的用法)。


this.firstChild.nodeValue


  十八、ownerDocument


  含义:返回包含该结点的文档的根。


  语法:pNode.ownerDocument


  注意:该方法用于文档的根结点将出错。


  十九、selectNodes


  含义:给定的样式匹配应用于当前结点并返回匹配的结点集合。


  语法:pNode.selectNodes('pattern')


  提示:pattern的编写与的select属性的值类似,其中以"/"开头表示从文档的根出发搜索;以"//"开头表遍历文档的所有结点;以".."开头表示从当前结点的父结点开始;如果欲从当前结点向下搜索则不能有以上特殊字符打头。


  示例,与当前结点同名的元素在其父元素内的个数:


childNumber(this.selectNodes("../"+this.nodeName+"[end()]").item(0))


  当前元素内名字为"skill"的元素的个数:


childNumber(this.selectNodes("skill[end()]").item(0))


  二十、selectSingleNode


  含义:与selectNodes类似,不同的只返回匹配的第一个结点、而不是结点集合。


  语法:pNode.selectSingleNode('pattern')


  示例,与当前结点同名的元素在其父元素内的个数:


childNumber(this.selectSingleNode("../"+this.nodeName+"[end()]"))


  当前元素内名字为"skill"的元素的个数:


childNumber(this.selectSingleNode("skill[end()]"))


  二十一、text


  含义:返回结点与它的子树内的文字内容。


  语法:pNode.text


  示例,整个文档内的文字内容:


this.ownerDocument.text


  当前元素及其子树的文字内容:


this.text


  二十二、xml


  含义:返回结点及其后代的XML表示。


  语法:pNode.xml


  示例,当前文档的XML内容:


this.ownerDocument.xml


  另有几个函数不作介绍,列于其下以供参考,如感兴趣,请访问http://msdn.microsoft.com获取详细说明。


formatTime(varTime, bstrFormat,varDestLocale)
formatDate(varDate, bstrFormat,varDestLocale)
apendChild(newChild)
definition
CloneNode
insertBefore(newChild, refChild)
parsed
removeChild(oldChild)
replaceChild(newChild, oldChild)
specified
transformNode(stylesheet)
transformNodeToObject(stylesheet,outputObject)
uniqueID(pNode)





归海一刀 published in(发表于) 2014/3/20 5:14:17 Edit(编辑)
XSL学习教程:运算符和函数_[XML教程]

XSL学习教程:运算符和函数_[XML教程]

XSL学习教程:运算符和函数_[XML教程]

 表一、运算符与特殊字符



运算符
描述
/
选择子元素,返回左侧元素的直接子元素;如果"/"位于最左侧表示选择根结点的直接子元素
//
递归下降,不论深度,搜索指定的元素;如果位于最左侧表示从根结点出发递归下降搜索指定元素
.
表示当前元素
*
通配符,选择任意元素,不考虑名字
@

取得属性值,作为属性名的前缀


@*


通配符,选择任意属性,不考虑名字


:
名字作用范围分隔符,将名字作用范围前缀与元素或属性名分隔开来
!*
在相关节点上应用指定方法
()*
分组,明确指定优先顺序
[]
应用过滤样式
[]*
下标运算符,用于在集合中指示元素


  表二、逻辑运算符



可选方式
描述
and and 或 &&
逻辑与
or or 或 ||
逻辑或
not() not
逻辑非


  表三、关系运算符



可选方式
描述
= 或 eq
相等
= 或 ieq
相等(不区分大小写)
!= 或 ne
不等
ine
不等(不区分大小写)
< 或 lt
小于
ilt
小于(不区分大小写)
<= 或 le
小于等于
ile
小于等于(不区分大小写)
> 或 gt
大于
igt
大于(不区分大小写)
>= 或 ge
大于等于
ige
大于等于(不区分大小写)
all
集合运算符,如果集合中所有项目均满足条件则返回"真"
any
集合运算符,如果集合中任意项目满足条件则返回"真"
|
集合运算符,返回两个集合的联合


  示例一:


  从个人简历中寻找具有具有"WEB开发"技能的人的姓名与E-Mail。假设文档结构如下所示:




name
sex
birthday
skill1
skill2

skilln






  为从以上结构的个人简历中寻找出所有具有WEB开发"技能的人的姓名与E-Mail的XSL文档结构如下:




姓名E-Mail姓名技能E-Mail 班组一季度二季度三季度四季度


添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.