XSLT - 模板应用程序

时间:2017-11-16 13:50:40

标签: xml xslt xpath

在XSLT样式表中,我定义了以下模板:

<xsl:template match="*[@xlink:type = 'simple' and @xlink:href]">
    <a href="{@xlink:href}">
        <xsl:apply-templates/>
    </a>
</xsl:template>
      <xsl:template match="//mets:mets/mets:fileSec/mets:fileGrp/mets:file/mets:FLocat">
    <a href="{@xlink:href}">
        <xsl:value-of select="@xlink:href"/>
    </a>
</xsl:template>

在XML文件中的部分&#34; mets:mets / mets:fileSec / mets:fileGrp / mets:file / mets:FLocat&#34;嵌套在&#34; mets:mets / mets:fileSec / mets:fileGrp / mets:file&#34;并且发生了好几次。

仅尝试2个部分&#34; mets:file&#34;我使用以下代码来应用模板:

<tr bgcolor="#ff0000">
  <td>Filename</td>
  <td><xsl:apply-templates select="//mets:mets/mets:fileSec/mets:fileGrp/mets:file/mets:FLocat" /></td>
</tr>

这应该呈现如下的HTML表示:

Data on file 1
.
.
.
Filename    file:///location/of/file1
Data on file 2
.
.
.
Filename    file:///location/of/file2

但是会发生什么:

Data on file 1
.
.
.
Filename    file:///location/of/file1file:///location/of/file2
Data on file 2
.
.
.
Filename    file:///location/of/file1file:///location/of/file2

我在这里做错了什么?

/保

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。但是我不明白为什么?

上面的代码......

<tr bgcolor="#ff0000">
  <td>Filename</td>
  <td><xsl:apply-templates select="//mets:mets/mets:fileSec/mets:fileGrp/mets:file/mets:FLocat" /></td>
</tr>

....改为....

<tr bgcolor="#ff0000">
  <td>Filename</td>
  <td><xsl:apply-templates select="." /></td>
</tr>

然后我得到了所需的输出。

模板是否可以从这段代码中获取所需的所有信息?

<xsl:template match="*[@xlink:type = 'simple' and @xlink:href]">
  <a href="{@xlink:href}">
    <xsl:apply-templates/>
  </a>
</xsl:template>

/保