生成xsl文档

时间:2012-04-24 19:10:08

标签: php xslt transform

我想使用php为我的xsl生成一个可视化的“文档”。我想要做的基本上是在没有XML的情况下转换我的xsl,以显示XML字段在HTML中的显示方式。

澄清:

的xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/> 
    <xsl:template match="/">
        <head>
        <title>My sample</title>
    </head>
    <body>
        My sample element: <xsl:value-of select="root/element1"/>
    </body>
    </xsl:template>
</xsl:stylesheet>

请求的输出:

<html>
<head>
    <title>My sample</title>
</head>
<body>
    My sample element: root/element1
</body>
</html>

有谁知道怎么做?

BR,杰克

1 个答案:

答案 0 :(得分:1)

XSLT是输入驱动的。如果将为不同的输入生成不同的输出。

在任何比简单示例更复杂的现实场景中,查看代码时没有任何输入来运行它意味着你无法说出输出会是什么样子。

对于您的简单示例,您可以通过另一个XSLT样式表运行XSLT样式表。

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output method="text" />

  <xsl:template match="*">
    <xsl:value-of select="concat('&lt;', name())" />
    <xsl:apply-templates select="@*" />
    <xsl:value-of select="'&gt;'" />
    <xsl:apply-templates select="*" />
    <xsl:value-of select="concat('&lt;/', name(), '&gt;')" />
  </xsl:template>

  <xsl:template match="@*">
    <xsl:value-of select="concat(' ', name(), '=&quot;', ., '&quot;')" />
  </xsl:template>

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

  <xsl:template match="xsl:value-of">
    <xsl:value-of select="concat('{{value-of: ', @select, '}}')" />
  </xsl:template>

  <!-- add appropriate templates for the other XSLT elements -->
</xsl:stylesheet>

使用您的示例,这将生成字符串

<head><title></title></head><body>{{value-of: root/element1}}</body>

然而,“为其他XSLT元素添加适当的模板”部分是困难的。您的输出将按输入顺序排列(XSLT是输入驱动的,正如我所说)。您的XSLT程序很可能的布局方式与它将要生成的输出相同,因此从中生成合理的文档可能比您想象的要难得多。