【问题标题】:<xsl:apply-templates> usage with <xsl:for-each> using XSLT1.0 transformations<xsl:apply-templates> 与 <xsl:for-each> 一起使用 XSLT1.0 转换
【发布时间】:2017-11-12 03:18:06
【问题描述】:

我是 XSLT 的新手,我正在努力解决这个问题。 我有一个这样的 xml:

<rowset>
<row num="l">
<empno>7839</empno>
<ename>KING</ename>
<country>Australia</country>
</row>
<row num="2">
<empno>7788</empno>
<ename>REIJK/ename>
<country>Japan</country>
</row>
</rowset>

我需要使用 XSLT 将 HTML 转换为以下格式:

<hl>Names</hl>
<ul>
<li>KING</li>
<li>REIJK/li>
</ul>
<hl>Countries</hl>
<ul>
<li>Australia</li>
<li>Japan</li>
</ul>

我有以下代码。我使用 for-each 无法获取标签。非常感谢。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<h1>Names</h1>
<ul>
<li>
<xsl:for-each select="/row/ename">
<xsl:apply-templates select="rowset/row/ename"/>
</xsl:for-each>
</li>
</ul>
<h1>Countries</h1>
<ul>
<li>
<xsl:apply-templates select="rowset/row/country"/>
</li>
</ul>
</xsl:template>
<xsl:template match="/row/ename">
<xsl:value-of select="ename"/>
</xsl:template>
<xsl:template match="/row/country">
<xsl:for-each select="country">
<li>
<xsl:value-of select="country"/>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我得到的代码的输出如下:

<h1>Names</h1>
<ul>
<li/>
</ul>
<h1>Countries</h1>
<ul>
<li>AustraliaJapan</li>
</ul>

【问题讨论】:

    标签: html xml xslt-1.0


    【解决方案1】:

    您在需要它的 XPath 中缺少 rowset,并在不需要它的地方使用它。

    没有for-each,您也可以干净利落地执行此操作。如果您想为每个名称或国家/地区重复&lt;li&gt;,则&lt;li&gt; 需要for-eachtemplate 内。

    当以下应用于您的示例输入时(添加了缺少的&lt;

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
      <xsl:output method="html"/>
      <xsl:template match="/">
        <h1>Names</h1>
        <ul>
          <xsl:apply-templates select="rowset/row/ename"/>
        </ul>
        <h1>Countries</h1>
        <ul>
          <xsl:apply-templates select="rowset/row/country"/>
        </ul>
      </xsl:template>
    
      <xsl:template match="ename | country">
        <li>
          <xsl:value-of select ="."/>
        </li>
      </xsl:template>
    </xsl:stylesheet>
    

    结果是:

    <h1>Names</h1>
    <ul>
      <li>KING</li>
      <li>REIJK</li>
    </ul>
    <h1>Countries</h1>
    <ul>
      <li>Australia</li>
      <li>Japan</li>
    </ul>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2021-03-15
      • 2013-04-15
      相关资源
      最近更新 更多