3

xsdファイルで、要素にさらに多くのオカレンスがあることを定義します。

<xs:element name="Type" type="xs:string" maxOccurs="unbounded"/>

そのため、xmlファイルでは、オブジェクトにさらに「Type」要素が含まれる場合があります。xslファイルでは、私が行うことは次のとおりです。

<xsl:for-each select="Movies/Movie">
<tr>
<td><xsl:value-of select="Type"/></td>
</tr>
</xsl:for-each>

このメソッドでは、そのノードセットの最初の「Type」要素のみを取得できます。しかし、「Movies / Movie」ノードセットに存在するすべての「Type」要素を選択したいのですが、これを実現する方法はありますか?

4

3 に答える 3

2

XSLT 1.0では、xsl:value-ofが複数のノードを選択すると、最初のノードを除くすべてが無視されます。XSLT 2.0では、選択したすべてのノードのスペースで区切られた連結を取得します。XSLT 1.0を使用しているかのように、証拠から聞こえます。XSLT 1.0で複数の要素を選択する場合は、for-eachが必要です。

<xsl:for-each select="Type">
  <xsl:value-of select="."/>
</xsl:for-each>
于 2012-11-16T22:35:52.167 に答える
2

xsl:for-each別のものを使用するか、xsl:apply-templates代わりに使用する必要があります。

を使用しない例を次に示しますxsl:for-each...

XML入力

<Movies>
    <Movie>
        <Type>a</Type>
        <Type>b</Type>
        <Type>c</Type>
    </Movie>
    <Movie>
        <Type>1</Type>
        <Type>2</Type>
        <Type>3</Type>
    </Movie>
</Movies>

XSLT 1.0

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

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

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

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

    <xsl:template match="Type">
        <td><xsl:value-of select="."/></td>
    </xsl:template>

</xsl:stylesheet>

出力

<html>
   <tr>
      <td>a</td>
      <td>b</td>
      <td>c</td>
   </tr>
   <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
   </tr>
</html>
于 2012-11-16T22:36:09.593 に答える
0

以下のように試してください(インデックスを1として一致して選択してください):

  <xsl:template match="/Movies/Movie">
       <xsl:value-of select="Type[1]"/>
  </xsl:template>
于 2012-11-16T19:47:55.013 に答える