3

XSL を介して XML ファイルを HTML に変換します。私のhtmlテーブルには、xml要素タグの1つのエントリごとに、セルのコンテンツを新しい行に分割する必要がある列があります。

このためにxmlファイルを設定する方法がわかりません。私のhtmlファイルについて考えていた出力は次のとおりです。

<info>
line1<br/>
line2<br/>
line3<br/>
line4
</info>

xsl-partでうまくいかないもの:

    <td>
    <xsl:for-each select="info">
    <xsl:value-of select="." /> <br/>
    </xsl:for-each>
    </td>

<ul>xml の行をandでラップしようとしましたが、うまくいきませ<li>んでした。エラーがあるのは xsl-part だと思います。<br/>value-of ステートメントの後に を配置すると、すべてが出力されてから が追加されます<br/>が、もちろん<br/>for each エントリが必要です。

これを正しく設定する方法を教えていただければ幸いです。

4

2 に答える 2

4

この変換:

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

 <xsl:template match="info/*[position() > 1]">
  <br /><xsl:text>&#xA;</xsl:text>
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

次の XML ドキュメントに適用した場合(質問でソース XML ドキュメントが提供されていないため):

<info>
  <t>line1</t>
  <t>line2</t>
  <t>line3</t>
  <t>line4</t>
  <t>line5</t>
</info>

必要な結果<info>が生成されます (これは HTML 要素ではないため、意図的に生成されません) 。

line1<br/>
line2<br/>
line3<br/>
line4<br/>
line5

注 1 : この変換は、すべての XSLT 1.0 および 2.0 プロセッサ (MSXML3、MSXML4、MSXML6、.NET XslCompiledTransform、.NET XslTransform、Saxon 6.5.4、XML-SPY、Saxon 9.1.05) で正確に上記の結果を生成することが検証されました。 、XQSharp、AltovaXML2011 (XSLT 2.0 の XML-SPY)。

注2 :結果を要素にラップしたい場合は、<info>テンプレートを追加してください:

 <xsl:template match="info">
  <info>
   <xsl:text>&#xA;</xsl:text><xsl:apply-templates/><xsl:text>&#xA;</xsl:text>
  </info>
 </xsl:template>
于 2012-06-12T02:58:44.450 に答える
0

次のようにすることをお勧めします。xml 入力ファイルには、次のような構造が含まれています。

<info>
    <line>line1</line>
    <line>line2</line>
    <line>line3</line>
    <line>line4</line>
</info>

また、xslt には以下が含まれます。

<td>
    <xsl:for-each select="info/line">
        <xsl:value-of select="."/><br/>
    </xsl:for-each>
</td>

これにより、次のようになります(使用される出力方法はhtml、通常br、結果ファイルで要素が閉じられないようにするものです):

<td>
    line1<br>
    line2<br>
    line3<br>
    line4<br>
</td>

ファイナルを削除する必要がある場合はbr、さらに xsl コードを追加する必要があります。

于 2012-06-11T20:56:56.330 に答える