首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用"xsl:include“来构建正确的HTML文档树,假设HTML位于"xsl:include”文件中

可以使用"xsl:include“来构建正确的HTML文档树,假设HTML位于"xsl:include”文件中
EN

Stack Overflow用户
提问于 2021-04-22 05:22:02
回答 2查看 39关注 0票数 0

我准备自动生成大约2.500行的XHTML,并使用XSLT将XML/XSL转换为输出XHTML文件。由于长度(以及得到更好的概述),我希望模块化的XSL。

根据XSL2.0Spec:https://www.w3.org/TR/xslt20/#include,include必须是一个顶级元素,这意味着我不能在另一个模板中添加包含标记。

澄清我的问题:

在这种特殊情况下,是否可以使用"xsl:include“来构建HTML标记结构,其中HTML是父、头和体是childs,等等?

注意!我非常清楚,在执行“包含”场景时,我遗漏了HTML标记,但这是因为我不知道如何添加HTML标记以解决HTML结构问题。

我在XSL规范、Saxon文档以及其他渠道中搜索了执行XSLT的示例,以及"xsl:include“,以便模块化代码,但没有成功。

XML文件(用于两种测试方案):

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xml" href="stylesheet.xsl" version="2.0"?>

<data>
  <repo-1>
    <title>Title-1</title>
    <title>Title-2</title>
  </repo-1>
  <repo-2>
  <body>Body content from XML data</body>
</repo-2>
</data>

只使用一个而不包括的XSL文件

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
  <xsl:template match="/data">

  <html>
    <head>
      <title>
        <xsl:value-of select = "repo-1/title[2]"/>
    </title>
    </head>
    <body>
      <xsl:value-of select = "repo-2/body"/>
    </body>
  </html>

  </xsl:template>

</xsl:stylesheet>

包含的XSL

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- Includes -->
<xsl:include href="head.xsl"></xsl:include>
<xsl:include href="body.xsl"></xsl:include>

XSL包括文件头

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/data/repo-1">
      <head>
        <title>
          <xsl:value-of select = "title"/>
        </title>
      </head>
  </xsl:template>

</xsl:stylesheet>

XSL包括文件体

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/data/repo-2">
      <body>
        <xsl:value-of select = "body"/>
      </body>
  </xsl:template>

</xsl:stylesheet>

使用一个XSL文件的结果:

代码语言:javascript
复制
<!DOCTYPE HTML>
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Title-2</title>
</head>

<body>Body content from XML data</body>

使用的结果包括:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<head>
  <title>Title-1 Title-2</title>
</head>

<body>Body content from XML data</body>

</html>

希望通过使用包含的结果

代码语言:javascript
复制
<!DOCTYPE HTML>
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Title-2</title>
</head>

<body>Body content from XML data</body>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-22 07:02:19

您可以使用

代码语言:javascript
复制
<xsl:template match="/data">

  <html>
    <xsl:apply-templates/>
  </html>

</xsl:template>

在包含这两个模块的主样式表中。

票数 1
EN

Stack Overflow用户

发布于 2021-04-22 08:53:08

这可能有点不寻常,但您可以使用XInclude将代码插入到样式表中(在将代码提交给XSLT处理程序之前,需要将其通过XInclude处理器)。这是XSLT作为XML的优点之一--您可以在样式表代码中使用整个XML处理设备。

我认为,之所以不经常这样做,是因为它没有鼓励使用xsl:include和xsl:import的代码具有正确的模块化和可重用性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67207192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档