XML

XML 知识量:7 - 28 - 99

5.5 XSL访问节点><

访问单个节点- 5.5.1 -

模板将一组规则与XML中的节点进行关联,而要提取节点中包含的数据就需要访问节点。访问单个节点的语法如下:

<xsl:value-of select="标记匹配模式"/>

其中:

  • xsl:value-of用于输出指定的XML元素内容。

  • select属性用于选择被提取值的节点。

下面的示例表示提取XML文档中元素“年龄”的内容:

<xsl:value-of select="年龄"/>

访问多个相同节点- 5.5.2 -

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>

节点的选择方式- 5.5.3 -

<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>

③使用星号(*)。路径中“*”用于代替任意的元素节点名称,例如不知道中间一层节点名称时,就可以使用“*”代替:

/员工列表/*/姓名

④使用双斜杠(//)。“*”只能匹配已知结构中某一层的任意元素,而“//”可以直接引用任意层的后代节点。例如直接匹配“员工列表”后代中所有的“年龄”节点,不用考虑中间有几层关系:

/员工列表//年龄

访问指定元素的属性- 5.5.4 -

<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”。

在模板中选择多个元素- 5.5.5 -

XSL允许一次选择多个节点,只需要使用“|”来选择模板匹配的多个元素即可。例如同时选择XML中的“姓名”、“性别”和“年龄”节点:

<xsl:template match="姓名|性别|年龄">
    <xsl:value-of select="."/>
</xsl:template>

使用附加条件访问节点- 5.5.6 -

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>