0

最後の投稿でごめんなさい。

今、私はより明確にしようとします。

HTMLからいくつかのタグを選択する必要があり、次のxsltがあります

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
 <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
 </xsl:copy>
</xsl:template>

<xsl:template match="a"><xsl:apply-templates/></xsl:template>
<xsl:template match="img"/>
</xsl:stylesheet>

私の理解によれば、これはhtmlページ/ドキュメントから選択<a>して<img>タグを付け、タグ内のコンテンツを印刷します(これに関する私の理解が間違っているかどうか教えてください)。しかし、上記の XSLT はページの html 全体を出力します。どこが間違っていたのか、それを正しくするために何をする必要があるのか​​ 誰でも指摘できますか.

ありがとうございました。

4

1 に答える 1

1

あなたの理解は正しくないと思います。XSLT のテンプレートを順番に見ていくと、標準の ID テンプレートから始めます。

<xsl:template match="node()|@*">
   <xsl:copy>
     <xsl:apply-templates select="node()|@*"/>
   </xsl:copy>
</xsl:template>

これは単に要素とその属性をコピーし、その子要素の処理を続行します。したがって、 HTML にh1タグがある場合は、そのまま出力されます。

次に、要素のテンプレートでフォローアップします。

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

これは ID テンプレートよりも具体的であるため、優先されます。あなたの場合、それはa要素をコピーしませんが、その子を処理します。a要素にテキストが含まれていると仮定すると、これは必要に応じて出力されます。

最終的なテンプレートはimg要素と一致します

<xsl:template match="img"/>

しかし、これはすべて、それを完全に無視しているだけです。

XSLT には組み込みのテンプレートがあり、一致するものが見つからない場合に使用されることに注意してください。これらは要素をコピーしませんが、その子を処理し続けます。したがって、すべての HTML 要素をコピーしたくない場合は、組み込みのテンプレートを利用して、特定のアクションを実行したい要素のテンプレートのみを追加することができます。

私はあなたの要件を100%確信しているわけではありませんが、XHTMLを取り、要素内のテキストのみを出力したいだけなら、このXSLTを使用できます

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output omit-xml-declaration="yes" indent="yes"/>
   <xsl:strip-space elements="*"/>

   <xsl:template match="a/text()">
       <xsl:value-of select="." />
   </xsl:template>

   <xsl:template match="text()" />

</xsl:stylesheet>

そのため、 a<xsl:template match="a/text()">要素内のテキストを出力しますが、特定性の低いものは他のすべてのテキストを無視します。組み込みのテンプレートは他の要素に使用され、前述のように、これはそれらを出力せず、その子を処理するだけです (したがって、最終的にはテキスト ノードに到達します)。<xsl:template match="text()">

たとえば、この HTML があるとします。

<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <h1>Test</h1>
    Welcome!
    <img src="test.jpg" alt="Test Image" />
    <p><a href="test.html">Test Link</a></p>
  </body>
</html>

出力されるのはすべて

Test Link
于 2012-10-31T08:59:05.307 に答える