2

我正在寻找一种将 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 和 body 标签没有任何效果,因为浏览器会在解析期间自动添加它们,即使没有包含这些标签,该解决方案也能正常工作。

所以问题是:如何在上述解决方案的头部包含样式元素,如下所示:

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

1 回答 1

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>
于 2013-02-28T05:38:13.120 回答