Xml 结合<;xsl:param>;及<;xsl:include>;
我正试图通过将网站拆分成多个部分,使其更加友好。第一页有一个XML文件,现在已经转换成4个文件:index.XML、menu.XML、sidebar.XML和footer.XML (更新) 我在index.xsl文件中正确地包含了XML。现在我需要包括他们将使用的.xls。事实上,我在同一个文件中保存了所有内容,效果很好,所以XML include就解决了Xml 结合<;xsl:param>;及<;xsl:include>;,xml,xslt,xhtml,Xml,Xslt,Xhtml,我正试图通过将网站拆分成多个部分,使其更加友好。第一页有一个XML文件,现在已经转换成4个文件:index.XML、menu.XML、sidebar.XML和footer.XML (更新) 我在index.xsl文件中正确地包含了XML。现在我需要包括他们将使用的.xls。事实上,我在同一个文件中保存了所有内容,效果很好,所以XML include就解决了 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet v
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="menu" select="document('../menu.xml')"/>
<xsl:param name="sidebar" select="document('../sidebar.xml')"/>
<xsl:param name="footer" select="document('../footer.xml')"/>
<xsl:template match="/">
<!-- Split header.xsl -->
<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title><xsl:value-of select="page/title" /></title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" src="js/custom.js"></script>
</head>
<body>
<div class="content">
<div class="header">
<div id="tabs" class="menu">
<ul>
<xsl:for-each select="$menu/menu/category">
<li><a><xsl:attribute name="href"><xsl:value-of select="link" /></xsl:attribute><xsl:value-of select="name"/></a></li>
</xsl:for-each>
</ul>
</div>
</div>
<div class="body">
<!-- End Split header.xsl -->
<div class="body_izqda">
<xsl:for-each select="page/news/contents/entry">
<h2><xsl:value-of select="title" /></h2>
<p><xsl:value-of select="text" /></p>
</xsl:for-each>
</div>
<!-- Split sidebar.xml -->
<div class="body_dcha">
<ul>
<xsl:for-each select="$sidebar/sidebar/results/category">
<li>
<a><xsl:attribute name="href"><xsl:value-of select="link" /></xsl:attribute><xsl:value-of select="name" /></a>
</li>
</xsl:for-each>
</ul>
</div>
<!-- End Split sidebar.xml -->
<!-- Split footer.xml -->
<div class="clear">
</div>
</div>
<div class="footer">
<ul>
<xsl:for-each select="$footer/footer/entry">
<li><a><xsl:attribute name="href"><xsl:value-of select="link" /></xsl:attribute><xsl:value-of select="title" /></a></li>
</xsl:for-each>
</ul>
</div>
</div>
</body>
</html>
<!-- End Split footer.xml -->
</xsl:template>
</xsl:stylesheet>
-
顺便说一下,我想用XLS文件拆分XLST部分。我试过使用
,但无法使用param$菜单
我已在需要拆分文档的位置使用“拆分”和“结束拆分”标记
我已经试着用@svick的第一个回复来解决这个问题,但是用我在PHP的XSLTPRocessor类中所做的标记来拆分它会给我带来:
警告:XSLTProcessor::importStylesheet()[XSLTProcessor.importStylesheet]:元素导入仅允许作为样式表的子级
所以,以我的方式进行拆分,然后将其包括在内,有点不对劲
我怎样才能解决它
提前谢谢
注1
head.xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title><xsl:value-of select="page/title" /></title>
<link rel="stylesheet" type="text/css" href="css/reset-min.css" />
<link rel="stylesheet" type="text/css" href="css/main.css" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui.css" />
</head>
</xsl:template>
</xsl:stylesheet>
将
和
结合起来对我来说似乎很好:
main.xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="title" select="'Page title'" />
<xsl:include href="head.xsl"/>
</xsl:stylesheet>
head.xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title><xsl:value-of select="page/title" /></title>
<link rel="stylesheet" type="text/css" href="css/reset-min.css" />
<link rel="stylesheet" type="text/css" href="css/main.css" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui.css" />
</head>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="head">
<title>
<xsl:value-of select="$title"/>
</title>
</xsl:template>
</xsl:stylesheet>
在包含
的文件上应用main.xsl会按预期生成页面标题。如果这对您没有帮助,您应该在实际使用
和
的地方发布一些代码(这不起作用)。我明白了。问题是每个
d文件必须是有效的XSLT,这意味着它必须是有效的XML。在有效的XML中不能有未关闭的标记,但您需要例如head.xsl中的未关闭的
。所以,我认为在XSLT中无法做到这一点
所以,拆分有问题
以我现在的方式,然后
包括它。我怎样才能解决它
是的,有点不对劲。您要拆分砖块模板
首先,您需要拆分一些内容,因此此样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dummy="dummy"
exclude-result-prefixes="dummy">
<xsl:param name="menu" select="document('menu.xml')"/>
<xsl:param name="sidebar" select="document('sidebar.xml')"/>
<xsl:param name="footer" select="document('footer.xml')"/>
<dummy:attSet>
<footer class="footer"/>
<menu class="menu" id="tabs"/>
<sidebar class="body_dcha"/>
</dummy:attSet>
<xsl:template match="/page">
<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>
<xsl:value-of select="title" />
</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" src="js/custom.js"></script>
</head>
<body>
<div class="content">
<div class="header">
<xsl:apply-templates select="$menu"/>
</div>
<div class="body">
<xsl:apply-templates select="news/contents"/>
<xsl:apply-templates select="$sidebar"/>
<div class="clear"></div>
</div>
<xsl:apply-templates select="$footer"/>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="page/news/contents">
<div class="body_izqda">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="contents/entry/title">
<h2>
<xsl:value-of select="."/>
</h2>
</xsl:template>
<xsl:template match="contents/entry/text">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
<xsl:template match="menu/category|sidebar/results/category|footer/entry">
<li>
<a href="{link}">
<xsl:value-of select="name"/>
</a>
</li>
</xsl:template>
<xsl:template match="/footer|/menu|/sidebar">
<div>
<xsl:copy-of select="document('')/*/dummy:*/*[name()=name(current())]/@*"/>
<ul>
<xsl:apply-templates/>
</ul>
</div>
</xsl:template>
</xsl:stylesheet>
通过此输入:
<page>
<title>Some Page</title>
<news>
<contents>
<entry>
<title>Title1</title>
<text>Text1</text>
</entry>
<entry>
<title>Title2</title>
<text>Text2</text>
</entry>
<entry>
<title>Title3</title>
<text>Text3</text>
</entry>
<entry>
<title>Title4</title>
<text>Text4</text>
</entry>
</contents>
</news>
</page>
某页
标题1
文本1
标题2
文本2
标题3
文本3
标题4
文本4
本文件:
menu.xml
<menu>
<category>
<link>http://www.example.com/link1</link>
<name>Link1</name>
</category>
<category>
<link>http://www.example.com/link2</link>
<name>Link2</name>
</category>
<category>
<link>http://www.example.com/link3</link>
<name>Link3</name>
</category>
</menu>
<sidebar>
<results>
<category>
<link>http://www.example.com/link4</link>
<name>Link4</name>
</category>
<category>
<link>http://www.example.com/link5</link>
<name>Link5</name>
</category>
<category>
<link>http://www.example.com/link6</link>
<name>Link6</name>
</category>
</results>
</sidebar>
<footer>
<entry>
<link>http://www.example.com/link7</link>
<name>Link7</name>
</entry>
<entry>
<link>http://www.example.com/link8</link>
<name>Link8</name>
</entry>
<entry>
<link>http://www.example.com/link9</link>
<name>Link9</name>
</entry>
</footer>
http://www.example.com/link1
链接1
http://www.example.com/link2
链接2
http://www.example.com/link3
链接3
sidebar.xml
<menu>
<category>
<link>http://www.example.com/link1</link>
<name>Link1</name>
</category>
<category>
<link>http://www.example.com/link2</link>
<name>Link2</name>
</category>
<category>
<link>http://www.example.com/link3</link>
<name>Link3</name>
</category>
</menu>
<sidebar>
<results>
<category>
<link>http://www.example.com/link4</link>
<name>Link4</name>
</category>
<category>
<link>http://www.example.com/link5</link>
<name>Link5</name>
</category>
<category>
<link>http://www.example.com/link6</link>
<name>Link6</name>
</category>
</results>
</sidebar>
<footer>
<entry>
<link>http://www.example.com/link7</link>
<name>Link7</name>
</entry>
<entry>
<link>http://www.example.com/link8</link>
<name>Link8</name>
</entry>
<entry>
<link>http://www.example.com/link9</link>
<name>Link9</name>
</entry>
</footer>
http://www.example.com/link4
链接4
http://www.example.com/link5
链接5
http://www.example.com/link6
链接6
和footer.xml
<menu>
<category>
<link>http://www.example.com/link1</link>
<name>Link1</name>
</category>
<category>
<link>http://www.example.com/link2</link>
<name>Link2</name>
</category>
<category>
<link>http://www.example.com/link3</link>
<name>Link3</name>
</category>
</menu>
<sidebar>
<results>
<category>
<link>http://www.example.com/link4</link>
<name>Link4</name>
</category>
<category>
<link>http://www.example.com/link5</link>
<name>Link5</name>
</category>
<category>
<link>http://www.example.com/link6</link>
<name>Link6</name>
</category>
</results>
</sidebar>
<footer>
<entry>
<link>http://www.example.com/link7</link>
<name>Link7</name>
</entry>
<entry>
<link>http://www.example.com/link8</link>
<name>Link8</name>
</entry>
<entry>
<link>http://www.example.com/link9</link>
<name>Link9</name>
</entry>
</footer>
http://www.example.com/link7
链接7
http://www.example.com/link8
链接8
http://www.example.com/link9
链接9
输出与提供的样式表相同的结果
因此,现在您可以将样式表拆分为几个模块。您能澄清一下吗?你到底想怎么分割它?@svick你好。我有一个将网站从输出到的XSL。我想分两份。本文件的内容将在单独的XLS上显示。我不知道这是否更清楚。对不起,英语不是我的主要语言。如果你需要更多的解释,告诉我。提前谢谢!嗨@svick,我有你