0

php を使用して、xsl の視覚的な「ドキュメント」を生成したいと考えています。私がやりたいことは、基本的に、XML フィールドが HTML でどのように表示されるかを表示するために、XML なしで xsl を変換することです。

明確にするために:

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>

ただし、「他の XSLT 要素に適切なテンプレートを追加する」部分は難しい部分です。出力は入力の順序になります (前述のように、XSLT は入力駆動型です)。あなたの XSLT プログラムは、生成しようとしている出力と同じようにはレイアウトされない可能性が高いため、そこから適切なドキュメントを生成することは、あなたが思っているよりもかなり難しいかもしれません。

于 2012-04-24T21:45:11.697 に答える