2

XSLT の可能性についてもっと学ぶために、別のアプローチを使用してこの条件付きコードを記述するより良い方法があるかどうか疑問に思っています。

最初のインスタンスで href を検索するだけで、href 入力が存在する場合は、リンク付きの関連付けられた画像が表示され、alt タグの出力が表示されます。href 入力が存在しない場合、画像自体だけが + alt タグ出力として表示されます。

見た目も感じも少し不格好ですが、特定の目的には問題なく機能します。

そのため、結果を達成するためのよりクリーンでスマートな方法があるかどうかを知りたいと思っています。

アドバイスをいただければ幸いです。

ありがとう、オズモ

とにかく、これが私のマスターピースです...

      <!-- SUPPORTING IMAGE HREF CONDITIONAL -->
      <xsl:choose>
        <xsl:when test="SupportingImageLink/a/@href !=''">
          <tr>
            <td>
              <a href="{SupportingImageLink/a/@href}">
                <img src="{SupportingImage/img/@src}" width="680" alt="{SupportingImage/img/@alt}" style="border: 0;width: 100%;max-width: 680px;" class="center-on-narrow"></img>
              </a>
            </td>
          </tr>
        </xsl:when>
        <xsl:otherwise>
          <tr>
            <td>
                <img src="{SupportingImage/img/@src}" width="680" alt="{SupportingImage/img/@alt}" style="border: 0;width: 100%;max-width: 680px;" class="center-on-narrow"></img>
            </td>
          </tr>
        </xsl:otherwise>
      </xsl:choose>
      <!-- SUPPORTING IMAGE HREF CONDITIONAL : END -->

ここで要求されているのは、XML を削除したものです...

<root>
  <Title>New layout test</Title>
  <Edition>Octovember 2019</Edition>
  <Notification>
  <Body>Warning Warning Warning Will Robinson!! Aliens Aliens Aliens everywhere!</Body>
  </Notification>
  <Introduction>
    <Heading>Squids attack!</Heading>
    <Body>Ugh tacos artisan, single-origin coffee jianbing hoodie skateboard. 90's unicorn next level fixie. Glossier coloring book drinking vinegar, health goth flexitarian activated charcoal yuccie hexagon whatever normcore bushwick ethical mustache plaid lyft. Chicharrones edison bulb vinyl disrupt tbh glossier, marfa mumblecore four loko +1 leggings.</Body>
  </Introduction>
  <Section>
    <Heading>Just in - Cyborg bears attacking!</Heading>
    <Structure>3</Structure>
    <SupportingImage>
      <img src="/uploadedImages/dev/robots.png?n=3082" alt="Will Robinson" title="Will Robinson" style="width: 680px; height: 283px;" align="left" width="680" height="283" />
    </SupportingImage>
    <SupportingImageLink>
      <a href="http://www.squids-attack/cyb-bears.html">AAARRRRGGGGHHHH!!!</a>
    </SupportingImageLink>
    <Body>Ugh tacos artisan, single-origin coffee jianbing hoodie skateboard. 90's unicorn next level fixie. Glossier coloring book drinking vinegar, health goth flexitarian activated charcoal yuccie hexagon whatever normcore bushwick ethical mustache plaid lyft. Chicharrones edison bulb vinyl disrupt tbh glossier, marfa mumblecore four loko +1 leggings. Knausgaard af YOLO, direct trade drinking vinegar try-hard williamsburg roof party asymmetrical snackwave waistcoat. Venmo food truck next level raw denim, pabst photo booth quinoa chambray art party hot chicken cliche tote bag polaroid direct trade whatever. Shabby chic lomo locavore slow-carb leggings.</Body>
    <Button>More information</Button>
  </Section>
</root>
4

3 に答える 3

1

これをテンプレートとして書きます:

<xsl:template match="/SupportingImageLink/img">
    <img src="@src" alt="@alt" width="680" .../>
</xsl:template>

<tr>
    <td>
         <xsl:apply-templates select="SupportingImageLink/node()"/>
    </td>
</tr>

E&OE

アンカー部分は、デフォルトのコピー ルールによって自動的に発生することに注意してください。

于 2016-10-07T06:00:58.103 に答える
0

あなたの質問は、主に開発者の意見に基づいて回答される場合があります。これは SO では良いことではありません。パフォーマンスや保守性について話している場合、意見に基づくものはそれほど多くありません/できません。実行速度が速ければ速い!

愛すべき Michael Kay 氏が wrox から出版した本「XSLT 2.0 and XPATH 2.0 4.th Edition」で学んだ、従うことができるデザイン パターンがあります。

穴埋めスタイルシート

HTML のルック アンド フィールであり、XSLT の機能をフルに活用していません。ドキュメントはほとんどが html であり、さらに xslt-tag を使用して動的コンテンツを取得<xsl:value-of ..し、特定のプロジェクトでのスタイルの種類などを取得します。

ナビゲーション スタイルシート

穴埋めに加えて、「プログラミング」の方向に進みます。名前付きテンプレートで todo を外部委託し<xsl:template name="renderImage"ます。要素の値を出力するだけではありません。

ルールベースのスタイルシート

あなたの主な焦点は、xml を出力ターゲットに変換することです。純粋なテキストから任意のスキーマに対する xml 検証、json までさまざまです。<xsl:template match="img"主にやのようなテンプレートを作成し<xsl:template match="a"..ます。<xsl:apply-templates />-statementsによって呼び出されるルールのセットを作成します。「この名前付きテンプレートを今すぐ呼び出し、その後、この名前付きテンプレートを呼び出す」のように xslt プロセッサに命令するよりも、このノード (-set) のルールを探して、そこに定義されているルールを調べます

計算スタイルシート

複雑になり、XSLT と書き込み機能を最大限に活用し、ソース ツリーをターゲット ツリーに並べ替え、ノードを作成し、複数のソース ファイルとターゲット ファイルでこれを行います。次に、関数型プログラミングの概念を理解し、地平線を超えなければなりません。

于 2016-10-07T07:40:24.120 に答える