2

子ノードが混在する xml ファイル内のノードからコンテンツを抽出したいと考えています。以下はレイアウトのコピーです。

<content>
  bla bal bla...
  <p />
  <img url="me3_img1.jpg"></img>blaa bal
   bla laal laal
  <p />
</content>

「p」タグは、次のコンテンツ (画像とテキスト) を次の段落に配置する必要があることを示しています。画像は html で作成されます。画像のソースは、xml で自己定義された img タグの URL 属性です。

したがって、出力は次のようになります。

 <div>
    <p>
      bla bal bla...
    </p>

    <p>
      <img src = "me3_img1.jpg"/>blaa bal
       bla laal laal
    </p>
  </div>

どこから始めればよいか、またはこれを行う方法についての基本的な考え方を知っておくと役に立ちます。(ps: バージョン 1.0 の xpath と xslt のみ使用できます)

私は次のことを行うことができました:

<xsl:for-each select="./review/content/*">
  <xsl:if test="self::text()">
    Display text
  </xsl:if>
  <xsl:if test="self::p">
    <br/>
  </xsl:if>
  <xsl:if test="self::img">
    Display image
  </xsl:if>
</xsl:for-each>

self::p テストと self::img テストは機能しますが、self::text() テストは機能しません。ここで何が間違っていますか?

4

1 に答える 1

1

XML が次のようになっている場合:

<content>
    bla bal bla...
    <p />
    <img url="me3_img1.jpg">blaa bal</img>
    bla laal laal
    <p />
</content>

これを試して:

<xsl:for-each select="review/content/node()">
        <xsl:choose>
            <xsl:when test=". = not(node())">
                <p><xsl:value-of select="./preceding::text()[1]" /></p>
            </xsl:when>
            <xsl:when test=". = text()">
                <img><xsl:attribute name="src">url('<xsl:value-of select="./@url" />' </xsl:attribute></img>
                <p><xsl:value-of select="." /></p>
            </xsl:when>
        <xsl:otherwise/>
    </xsl:choose>
</xsl:for-each>
于 2013-05-21T08:43:17.780 に答える