在XML文件中嵌入XSLT?

时间:2019-01-16 07:06:41

标签: xml xslt

假设我们有:

<?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规则。

1 个答案:

答案 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