1

私はXSLに関する正式なトレーニングを受けておらず、まったく新しいものです。基本的に私は次のようなXMLファイルを持っています:

<document document="wpc_article_video_qp">
  <properties>
    <property type="name" prop_ns="http://sapportals.com/xmlns/cm" prop_name="displayname"/>
    <property type="createdBy">USER.PRIVATE_DATASOURCE.un:LU23921</property>
    <property type="includeInRSS" prop_ns="wpc_wcm" prop_name="wpc_wcm_rss"/>
    <property type="displayNewIcon" prop_ns="wpc_wcm" prop_name="wpc_wcm_new"/>
  </properties>
  <elements>
    <element type="videotitle">TestTitle</element>
    <element type="videopath">ICT/LB_1152kbps.mp4</element>
    <element type="videowidth">500</element>
    <element type="videoheight">250</element>
  </elements>
  <relatedlinks/>
  <relatedfiles/>
</document>

XMLを制御できません。つまり、XMLはツールによって生成され、変更することはできません。私が今やろうとしているのは、次のようにアンカータグを生成するXSLを作成することです。

<a style="display:block;width:500px;height:250px" id="player" href="ICT/LB_1152kbps.mp4"></a>

ここで、href、width、およびheightは、それぞれ「videopath」、「videowidth」、および「videoheight」XML要素から取得されます。

私はこのWebサイトと他のいくつかのWebサイトで検索しようとしましたが、私がXSLにまったく慣れていないので、どこから始めればよいのかよくわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

始めるのに適した場所を探している場合は、図書館などで XSLT の本を手に取るか、Zvon のようなオンライン チュートリアルを参照することをお勧めします。XSLT を作成するときは、専用のエディター lixe oXygenを強くお勧めします。オートコンプリート機能を使用して多くの入力を省くだけでなく、タグを自動的に閉じるだけでなく、すべてのプログラム コードと XPath 構文が有効かどうかもチェックします。

ここでの質問は次のとおりです。単一のアンカー タグだけでなく、HTML ドキュメント全体を生成する可能性があります。したがって、<element>要素を照合してアンカー タグを生成するテンプレートを次に示しますが、スタイルシート全体に統合する必要があります。

<xsl:template match="element">
  <a style="display:block;
            width:{element/@videowidth}px;
            height:{element/@videoheight}px" 
     id="player" href="{element/@videopath}"></a>
</xsl:template>

編集:アンカー タグだけを含む出力ドキュメントが本当に必要な場合: XSLT プロセッサは、ルート ノードで入力ドキュメントの処理を開始し、<xsl:apply-templates>(または<xsl:for-each>) を使用して指示したとおりに要素を処理します。テンプレート マッチング<element>を実際に有効にしたい場合は、ドキュメント要素のコンテキストからそのコンテキストに「移動」する必要があります。

<xsl:template match="/">
  <xsl:apply-templates select="document/elements/element"/>
</xsl:template>
于 2012-12-24T07:52:44.513 に答える
0

AVT(属性値テンプレート)を使用してこれを行う方法は次のとおりです。

<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="elements">
     <xsl:copy>
       <a style="display:block;
                 width:{*[@type='videowidth']}px;
                 height:{*[@type='videoheight']}px"
                 id="player" href="{*[@type='videopath']}"></a>
     </xsl:copy>
 </xsl:template>

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

注意してください

上記のCSSプロパティは、それぞれ新しい行にあります。これは、読みやすくするために行われます。実際の変換では、スペースを介さずにそれらを保持したい場合があります。スペースなしで目的の結果を生成するためです。

この変換が提供されたXMLドキュメントに適用される場合:

<document document="wpc_article_video_qp">
  <properties>
    <property type="name" prop_ns="http://sapportals.com/xmlns/cm" prop_name="displayname"/>
    <property type="createdBy">USER.PRIVATE_DATASOURCE.un:LU23921</property>
    <property type="includeInRSS" prop_ns="wpc_wcm" prop_name="wpc_wcm_rss"/>
    <property type="displayNewIcon" prop_ns="wpc_wcm" prop_name="wpc_wcm_new"/>
  </properties>
  <elements>
    <element type="videotitle">TestTitle</element>
    <element type="videopath">ICT/LB_1152kbps.mp4</element>
    <element type="videowidth">500</element>
    <element type="videoheight">250</element>
  </elements>
  <relatedlinks/>
  <relatedfiles/>
</document>

必要な正しい結果が生成されます。

<elements>
   <a style="display:block;width:500px;height:250px" id="player" href="ICT/LB_1152kbps.mp4"/>
</elements>
于 2012-12-24T12:59:15.080 に答える