0

我想使用 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,杰​​克

4

1 回答 1

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>

However, the "add appropriate templates for the other XSLT elements" part is the difficult bit. Your output will be in the order of the input (XSLT is input-driven, as I said). Your XSLT program will most likely not be layed out the same way as the output it is going to produce, so generating sensible documentation from it might be quite a bit harder than you think.

于 2012-04-24T21:45:11.697 回答