博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验:关于XPath中的13个轴
阅读量:6631 次
发布时间:2019-06-25

本文共 3927 字,大约阅读时间需要 13 分钟。

hot3.png

XSLT使用XPath来找寻XML文档中的信息,这几天在学习XSLT的找寻路径过程中,我写了下面这个例子,来加深我对XPath中各个轴的概念的理解

测试用的XML文档和XSLT文档

XML文档:LogReport.xml

  
DataA  
DataB  
DataC  
    
      
        
      
        
      
        
      
        
DataX  
DataY  
DataZ

对应的XSLT文档:LogReport.xslt(框架)

这是LogReport.xslt的骨架,中间<body>标签下的注释部分,是我添加后几节中实验代码的部分

  
  
  
                  
        
        
                  
            

1-2)子轴:child,属性轴:attribute

子轴child按文档顺序选中上下文节点所有的直接子节点,如果表达式中没有使用轴区分符,那么将被假定使用了子轴

属性轴选择当前节点的所有属性节点,可以用轴名attribute或预定义的缩写词“ @ ”选择属性

示例代码:

1.child & 2.attribute

输出效果:

1.child & 2.attribute

2015/2/7 20:34:17
2015/2/7 20:34:17

3)后代轴:descendant

后代轴选择当前节点的所有后代(子节点、子节点的子节点等),还允许选择属性节点或名称空间节点

示例代码:

3.descendant
  *
  

输出效果:

3.descendant

*abcdefg
*hijklmn
*opqrst
*uvwxyz

4)父轴parent

父轴只选择当前节点的直接父节点

示例代码:

4.parent

输出效果:

4.parent

XXX
2015/2/7 20:34:17

5)祖先轴ancestor

祖先轴按文档顺序的相反方向选择当前节点的所有祖先节点

示例代码:

5.ancestor

输出效果:

5.ancestor

2015/2/7 20:34:17
XXX

6)后继-兄弟轴following-sibling

后继-兄弟轴按照文档顺序选择文档中伺候出现的当前节点的所有兄弟节点

示例代码:

6.following-sibling
  *
  

输出效果:

6.following-sibling

*Lee
*Zhao

7)前驱-兄弟轴:preceding-sibling

前驱-兄弟轴按照与文档顺序相反的方向选择文档中此前出现的当前节点的所有兄弟节点

示例代码:

7.preceding-sibling
  *
  

输出效果:

7.preceding-sibling

*Zhang
*Wang

8)后继轴:following

除当前节点的所有后代节点外,后继轴按文档顺序选择文档中当前节点之后出现的所有节点

示例代码:

8.following
  *
_
  

输出效果:

8.following

*Data_DataX
*_DataX
*Data_DataY
*_DataY
*Data_DataZ
*_DataZ

9)前驱轴:preceding

前驱轴按照与文档顺序相反的方向选择文档中在当前节点之前出现的所有节点

示例代码:

9.preceding
  *
_
  

输出效果:

9.preceding

*xml-stylesheet_type='text/xsl' href='LogReport.xslt'
*Data_DataA
*_DataA
*Data_DataB
*_DataB
*Data_DataC
*_DataC

10)名称空间轴:namespace

名称空间轴选择当前节点的所有名称空间节点。如果当前节点没有名称空间

示例代码:

10.namespace

输出效果:

10.namespace

http://www.w3.org/XML/1998/namespace

11)自身轴:self

自身轴选择当前节点

示例代码:

11.self

输出效果:

11.self

2015/2/7 20:34:17

12)后代或自身轴:descendant-or-self

后代或自身轴按文档顺序选择当前节点及其所有后代节点,该轴不包括属性节点或名称空间节点

示例代码:

12.descendant-or-self
  *
  

输出效果:

12.descendant-or-self

*LogList
*Log
*LogMessage
*Log
*LogMessage
*Log
*LogMessage
*Log
*LogMessage

13)祖先或自身轴:ancestor-or-self

祖先或自身轴按文档顺序选择当前节点及其所有祖先节点

示例代码:

13.ancestor-or-self
  *
:
  

输出效果:

13.ancestor-or-self

*:type='text/xsl' href='LogReport.xslt'
*LogReport:DataA
*LogList:
*Log:
*Log:
*Log:
*Log:

最终的XSLT文档:LogReport.xslt(全文)

  
  
  
                  
        
        
                    
1.child & 2.attribute
        
        
        
        
                

        
3.descendant
        
        
          *
          
                       

        
4.parent
        
        
        
        
        

                
5.ancestor
        
        
        
        
              

                
6.following-sibling
        
        
          *
          
                      

                
7.preceding-sibling
        
        
          *
          
                      

                
8.following
        
        
          *
_
          
                    

                
9.preceding
        
        
          *
_
          
                    

                
10.namespace
        
        
                

                
11.self
        
        
                

                
12.descendant-or-self
        
        
          *
          
                      

                
13.ancestor-or-self
        
        
          *
:
          
                        

END

转载于:https://my.oschina.net/Tsybius2014/blog/376540

你可能感兴趣的文章
ThreadLocal小记
查看>>
【译】《Understanding ECMAScript6》- 第三章-Object
查看>>
EChart系列:在echart3中使用百度地图扩展之后,如何获取到百度地图对象
查看>>
web app 的技术参考 -- 来自 【百度移动建站指南】
查看>>
修改 Input placeholder 的样式
查看>>
leetcode-306 Additive Number
查看>>
spring mvc 请求转发和重定向(转)
查看>>
局域网接入Internet
查看>>
批处理收集
查看>>
Calendar 对象的使用实例
查看>>
oracle表分区的,分区操作,分区查询,子分区查询
查看>>
Spring中的CharacterEncodingFilter
查看>>
Valgrind与内存问题
查看>>
Windows使用WxWidgets开发界面(c++)环境搭建
查看>>
cplusplus解析
查看>>
尺度空间理论
查看>>
学习ASP.NET Core Razor 编程系列一
查看>>
log4j日志
查看>>
关于web应用程序安全的思考(修改版)
查看>>
单链表的运算
查看>>