【问题标题】:Transforming XML using XSL style sheet使用 XSL 样式表转换 XML
【发布时间】:2012-04-01 22:34:00
【问题描述】:

我正在开发一个应用程序,如果我需要转换如下所示的 XML 文档:

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE words SYSTEM "words.dtd">
<words>
<word id="word_1">Alfa</word>
<word id="word_2">Beta</word>
<word id="word_3">Gamma</word>
<word id="word_4">Pi</word>
</words>

使用 XSLT 样式表。我希望转换的结果是(在这种情况下)Alfa Beta Gamma Pi,这是我正在使用的 XSL:

<?xml version='1.0' encoding='ISO-8859-1'?>

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
    <xsl:for-each select="words/word">
    <tr>
      <td><xsl:value-of select="@id"/></td>
      <td>
      <xsl:attribute name="word">
        <xsl:value-of select="@id" />
      </xsl:attribute>
      </td>
    </tr>
    </xsl:for-each>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

结果不是我要找的那个。我必须在 XSLT 中进行哪些更改?

【问题讨论】:

  • 您在两个 value-of 参数中都将 id 属性拉了两次。如果要输出文本,则要将值之一更改为 select=word 或 select=。如下所示。
  • 如果你正在生成 HTML,那么你不想生成一个名为“word”的属性,因为 HTML 中没有这样的属性,它会被忽略。

标签: xml xslt


【解决方案1】:

样式表缺少开头的&lt;xsl:stylesheet 元素。

【讨论】:

  • 可能是复制/粘贴问题,因为我看到了结尾 - 但很好!
  • 是的,我已经为你的答案 +1 了,因为它看起来像 @haritz 排序出来的。
  • xsl:transform 也有效。假设开始和结束标签匹配,请参阅w3schools.com/xsl/xsl_transformation.asp :)
【解决方案2】:

让我猜猜……它输出的是 ID 而不是值。

你可能想要:

<td><xsl:value-of select="."/></td> 

<td><xsl:value-of select="text()"/></td> 

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2012-11-07
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多