假设我们有:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="class.xsl"?>
<class>
<student>Jack</student>
<student>Harry</student>
<student>Rebecca</student>
<teacher>Mr. Bean</teacher>
</class>
该文件可以在带有适当class.xsl
的浏览器中很好地呈现:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<ol>
<xsl:for-each select="class/student">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ol>
</body></html>
</xsl:template>
</xsl:stylesheet>
是否可以在同一XML文件中包含class.xsl
的内容,以使文件class.xsl
不存在?
我知道通常通过<link>
引用的CSS样式表也可以嵌套。
编辑:我尝试过引用与样式表相同的XML文件,但是XSLT的<stylesheet>
不能用作根元素。
是否可以允许class.xsl
来获取XML文件中定义的某些XSLT段并将其用作XSLT?这样可以定义一个通用XSLT文件,以从每个单独的XML文件中加载XSLT规则。
答案 0 :(得分:1)
原则上您可以这样:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="#ssid"?>
<xx>
<xsl:stylesheet version="1.0" id="ssid" xml:id="ssid"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<ol>
<xsl:for-each select="//class/student">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ol>
</body></html>
</xsl:template>
</xsl:stylesheet>
<class>
<student>Jack</student>
<student>Harry</student>
<student>Rebecca</student>
<teacher>Mr. Bean</teacher>
</class>
</xx>
我不知道浏览器对此的支持程度如何。根据对此答案的评论,Chrome需要xml:id
属性,而Firefox需要id
属性才能识别片段标识符#ssid
。