如何将XSL嵌入到XML中

时间:2013-02-27 20:30:13

标签: xml xslt

我正在寻找将XSL嵌入到XML中的解决方案,因此只有1个XML文件被发送到浏览器。我尝试了Dimitre Novatchev提出的解决方案:Embed xsl into an XML file

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/>    <xsl:variable name="vEmbDoc">
    <doc>
        <head></head>
        <body>
            <para id="foo">Hello I am foo</para>
        </body>
    </doc>
</xsl:variable>
<xsl:template match="para">
  <h1><xsl:value-of select="."/></h1>
</xsl:template>
<xsl:template match="xsl:template"/></xsl:stylesheet>

问题是,通过这个解决方案,我找不到在头部中包含样式元素的方法。似乎在提议的解决方案中头部和身体标签没有任何影响,因为浏览器将在解析过程中自动添加它们,并且解决方案即使没有包含这些标签也能正常工作。

所以问题是:如何在上面提到的解决方案中包含样式元素,如下所示:

<head><style>body {font-size:10pt;padding:20pt} </style></head>

1 个答案:

答案 0 :(得分:1)

此XML文档

<?xml-stylesheet type="text/xsl" href="myEmbedded.xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 exclude-result-prefixes="xsl">
 <xsl:output omit-xml-declaration="yes"/>
    <xsl:variable name="vEmbDoc">
        <doc>
            <head>
              <style>body {font-size:10pt;padding:20pt}</style>
              </head>
            <body>
                <para id="foo">Hello I am foo</para>
            </body>
        </doc>
    </xsl:variable>
    <xsl:template match="para">
      <h1><xsl:value-of select="."/></h1>
    </xsl:template>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="doc">
  <html>
   <xsl:apply-templates/>
  </html>
 </xsl:template>

    <xsl:template match="xsl:template"/>

    <xsl:template match="xsl:*">
      <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

包含一个XSLT样式表。起始PI指示浏览器将此样式表应用于自身

如此指定的转换产生想要的结果

    <html>

   <head xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

              <style>body {font-size:10pt;padding:20pt}</style>
              </head>

   <body xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <h1>Hello I am foo</h1>

   </body>

</html>