【问题标题】:XSLT output as XHTMLXSLT 输出为 XHTML
【发布时间】:2018-06-16 08:00:57
【问题描述】:

所以我有一个通过其 DTD 验证的 XML 文件,现在我必须使用应该将每个用户的所有页面输出到 XHTML 文件的 XSLT 进行转换。有人告诉我我应该使用“for-each”,但是,我该怎么做才能为每个用户获得一个输出文件? (每个输出文件应该是一个包含用户信息的 XHTML 文件,每个用户总共一个文件)

XML(示例):

<store>
<users>
      <user id="user1">
            <name username="user1">User 1</name>
            <email>user1@email.com</email>
            <birth birth_date=""></birth>
            <mob_number>123</mob_number>
            <address>Street1</address>
            <picture></picture>
            <basket></basket>
      </user>

      <user id="user2">
            <name username="user2">User 2</name>
            <email>user2@email.com</email>
            <birth birth_date=""></birth>
            <mob_number>123</mob_number>
            <address>Street1</address>
            <picture></picture>
            <basket></basket>
      </user>

      <user id="user3">
            <name username="user3">User 3</name>
            <email>user3@email.com</email>
            <birth birth_date=""></birth>
            <mob_number>123</mob_number>
            <address>Street1</address>
            <picture></picture>
            <basket></basket>
      </user>

      <user id="user4">
            <name username="user4">User 4</name>
            <email>user4@email.com</email>
            <birth birth_date=""></birth>
            <mob_number>123</mob_number>
            <address>Street1</address>
            <picture></picture>
            <basket></basket>
      </user>
</users>
</store>

谢谢

【问题讨论】:

  • 输出应该是什么样的?到目前为止你尝试了什么?
  • 输出应该是每个用户的html页面。每个页面都应该有一个用户的信息。

标签: html xml xslt xhtml


【解决方案1】:

正如@MartinHonnen 所说,xsl:result-document 是要走的路。
此答案将每个 user 输出为一个名为 HTML_userX 的单独文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:strip-space elements="*" />

  <xsl:template match="/store/users">
      <xsl:for-each select="user">
        <xsl:result-document href="{concat('HTML_',@id)}" method="xhtml">
          <xsl:copy-of select="." />
        </xsl:result-document>
      </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

【讨论】:

  • 是的,我尝试过,但每当我运行它时,我都会在 IntelliJ 中收到以下错误:错误:'不支持的 XSL 元素'
  • @ArmanFreitas:您至少需要一个 XSLT-2.0 处理器才能使用 xsl:result-document,这是将一个 XML 文件拆分为多个文件所必需的。
  • 所以,我有点迷路了,对此我很陌生,那我该怎么办?
  • @ArmanFreitas:使用 XSLT-2.0+ 处理器,例如 Saxon
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2010-10-10
相关资源
最近更新 更多