1

ブラウザーを使用して、HTML を含む可能性のある XML を XSL スタイルシートで変換したいと考えています。この記事では、ユーザーのMads Hansenが次のように書いています。

HTML が適切な形式である場合は、エスケープしたり CDTATA でラップしたりせずに、HTML タグを埋め込むだけです。可能であれば、コンテンツを XML で保持すると役立ちます。ドキュメントをより柔軟に変換および操作できます。HTML の名前空間を設定して、HTML タグをそれをラップする他の XML から明確にすることができます。

提案されたソリューションは気に入っていますが、機能させることはできません。h を html の名前空間として使用しました。

temp.xml

<?xml version='1.0' encoding='UTF-8' ?>
<?xml-stylesheet type='text/xsl' href='temp.xsl'?>
<root xmlns:h="http://www.w3.org/1999/xhtml">
  <MYTAG title="thisnthat">
    text before ol
    <h:ol>
      <h:li>item</h:li>
      <h:li>item</h:li>
    </h:ol>
    text after ol
  </MYTAG>
</root>

temp.xsl

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:h="http://www.w3.org/1999/xhtml">
  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/root">
    <html lang="en-US">
      <head>
        <meta charset="UTF-8" />
        <title></title>
      </head>
      <body>
        <xsl:apply-templates />
      </body>
    </html>
  </xsl:template>
  <xsl:template match="MYTAG">
    <h3>
      <xsl:value-of select="@title" />
    </h3>
    <xsl:apply-templates />
  </xsl:template>
</xsl:stylesheet>

出力 (Firefox 18 から) は次のとおりです。

thisnthat
text before ol item item text after ol 
4

1 に答える 1

0

あなたは最終的な HTML を生成しており、制御下にあるため、ここで名前空間を使用する理由がわかりません。カスタム タグと標準の HTML の間に矛盾がある場合、つまり、<a...>HTML とはセマンティクスが異なるカスタム タグがある場合にのみ、これを行う必要があります。私はあなたの変換を機能させました

a) すべての HTML 名前空間の削除

b) 恒等変換の追加

test.xml

<?xml version='1.0' encoding='UTF-8' ?>
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
<root>
    <MYTAG title="thisnthat">
        text before ol
        <ol>
            <li>item</li>
            <li>item</li>
        </ol>
        text after ol
    </MYTAG>
</root>

test.xsl

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="UTF-8" indent="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/root">
        <html lang="en-US">
            <head>
                <meta charset="UTF-8" />
                <title></title>
            </head>
            <body>
                <xsl:apply-templates />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="MYTAG">
        <h3>
            <xsl:value-of select="@title" />
        </h3>
        <xsl:apply-templates />
    </xsl:template>
</xsl:stylesheet>
于 2013-01-11T01:00:40.123 に答える