XML 知识量:7 - 28 - 99
模板将一组规则与XML中的节点进行关联,而要提取节点中包含的数据就需要访问节点。访问单个节点的语法如下:
<xsl:value-of select="标记匹配模式"/>
其中:
xsl:value-of用于输出指定的XML元素内容。
select属性用于选择被提取值的节点。
下面的示例表示提取XML文档中元素“年龄”的内容:
<xsl:value-of select="年龄"/>
XSL访问多个相同节点的语法如下:
<xsl:for-each select="标记匹配模式"> ...... <xsl:value-of ....../> ...... </xsl:for-each>
其中:
<xsl:for-each>元素用于循环遍历整个XML文档,对与select属性值匹配的多个相同节点数据进行处理和输出。
select属性用于选择需要循环输出的节点元素。
<xsl:value-of>元素用于输出子节点的内容。
下面的示例表示循环遍历输出XML中所有员工节点的数据:
<xsl:for-each select="员工"> <xsl:value-of select="姓名"/> <xsl:value-of select="性别"/> <xsl:value-of select="年龄"/> <xsl:value-of select="职位"/> <xsl:value-of select="电话"/> </xsl:for-each>
<xsl:template>中的match属性用于指定需要匹配的节点,<xsl:apply-templates>、<xsl:for-each>、<xsl:value-of>中的select属性也用于指定需要匹配的节点。其实,XSL提供了多种选择节点的方式。
1、使用元素名访问节点。直接使用XML文档中的某个元素名来选择匹配的节点。例如下面示例匹配XML中名称为“员工列表”的元素:
<xsl:apply-templates select="员工列表"/>
2、使用匹配符访问节点。
匹配根节点:使用符号“/”。
匹配根元素:使用符号“/*”。
匹配当前节点:使用符号“.”。
匹配父节点:使用符号“..”
通过路径访问节点。
通过路径访问节点又可以分为多种情况:
①使用绝对路径,即从源树根节点到指定节点的路径。例如访问姓名节点的绝对路径为:
/员工列表/员工/姓名
②使用相对路径,即从当前节点到指定节点的路径。例如以下示例中,“员工/姓名”就是相对路径:
<xsl:template match="员工列表"> <xsl:value-of select="员工/姓名"/> </xsl:template>
③使用星号(*)。路径中“*”用于代替任意的元素节点名称,例如不知道中间一层节点名称时,就可以使用“*”代替:
/员工列表/*/姓名
④使用双斜杠(//)。“*”只能匹配已知结构中某一层的任意元素,而“//”可以直接引用任意层的后代节点。例如直接匹配“员工列表”后代中所有的“年龄”节点,不用考虑中间有几层关系:
/员工列表//年龄
<xsl:value-of select="......"/>除了可以获取元素的值外,还可以用于获取元素属性的值,使用时只需在属性名称前加上“@”符号即可。例如对于以下XML文档:
<?xml version="1.0" encoding="UTF-8"?> <员工列表> <员工 ID="p001"> <姓名>王甲</姓名> <性别>男</性别> <年龄>26</年龄> </员工> <员工 ID="p002"> <姓名>王甲</姓名> <性别>男</性别> <年龄>26</年龄> </员工> </员工列表>
要获取员工元素ID属性的值,只需要以下语句:
<xsl:for-each select="员工"> <xsl:value-of select="@ID"/> <xsl:value-of select="姓名"/> <xsl:value-of select="性别"/> <xsl:value-of select="年龄"/> </xsl:for-each>
其中,通过@ID就可以获取ID属性的值:“p001”和“p002”。
XSL允许一次选择多个节点,只需要使用“|”来选择模板匹配的多个元素即可。例如同时选择XML中的“姓名”、“性别”和“年龄”节点:
<xsl:template match="姓名|性别|年龄"> <xsl:value-of select="."/> </xsl:template>
XSL中可以为选择的元素添加限制条件,例如可以限制元素必须有给定的子元素或属性等。使用时需要使用“[]”符号。例如对于下面的XML:
<?xml version="1.0" encoding="UTF-8"?> <员工列表> <员工 ID="p001"> <姓名>王甲</姓名> <性别>男</性别> <年龄>26</年龄> <籍贯>北京</籍贯> </员工> <员工 ID="p002"> <姓名>王甲</姓名> <性别>男</性别> <年龄>26</年龄> <电话>13356411234</电话> </员工> </员工列表>
1、限制元素必须有子元素。例如查看具有“电话”元素的员工信息:
<xsl:template match="员工[电话]"> <xsl:value-of select="姓名"/> <xsl:value-of select="性别"/> <xsl:value-of select="年龄"/> </xsl:template>
2、添加多个限制条件。通过在“[]”中使用“|”来实现。例如查看具有“电话”或“籍贯”元素的员工信息:
<xsl:template match="员工[电话|籍贯]"> <xsl:value-of select="姓名"/> <xsl:value-of select="性别"/> <xsl:value-of select="年龄"/> </xsl:template>
3、在条件中使用“*”。在只知道限制条件,而不知道元素名称时可以使用“*”代替元素名称。例如查看具有“电话”子元素的任何元素的“姓名”子元素的值:
<xsl:template match="*[电话]"> <xsl:value-of select="姓名"/> </xsl:template>
4、限制元素必须带有给定的属性。通过在“[]”中使用“@”来实现。例如查看具有“ID”属性的“员工”元素的信息:
<xsl:template match="员工[@ID]"> <xsl:value-of select="姓名"/> <xsl:value-of select="性别"/> <xsl:value-of select="年龄"/> </xsl:template>
5、限制元素或属性的内容为给定的字符串。通过在“[]”中使用“=”判断元素或属性的值是否是给定的字符串来实现。例如查看“员工”元素“ID”属性值为“p002”的员工信息:
<xsl:template match="员工[@ID='p002']"> <xsl:value-of select="姓名"/> <xsl:value-of select="性别"/> <xsl:value-of select="年龄"/> </xsl:template>
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6