-5

xsltを使用して翻訳する必要がある以下のxmlがあります。

<table-text>
    <widget-wrap> <firstname lang="en">first name 1</firstname></widget-wrap>
    <widget-wrap><lastname>last name 1</lastname></widget-wrap>
    <widget-wrap><email>email 1</email></widget-wrap>
</table-text>

<table-text>
<widget-wrap><firstname lang="en">first name 2</firstname></widget-wrap>
<widget-wrap><lastname>last name 2</lastname></widget-wrap>
<widget-wrap><email>email 2</email></widget-wrap>
</table-text>

<table-text>
<widget-wrap><firstname lang="en">first name 3</firstname></widget-wrap>
<widget-wrap><lastname>last name 3</lastname></widget-wrap>
<widget-wrap><email>email 3</email></widget-wrap>
</table-text>

出力は、以下のように縦のテーブルになります。

 <table>
      <tr>
   <td>first name 1</td>
   <td>first name 2</td>
   <td>first name 3</td>
   </tr>
<tr>
    <td>last name 1</td>
    <td>last name 2</td>
    <td>last name 3</td>
</tr>
<tr>
    <td>email 1</td>
    <td>email 2</td>
    <td>email 3</td>
</tr>
 </table>

誰かがこれを整理するのを手伝ってくれませんか。ありがとうございます。

4

1 に答える 1

1

入力に関する問題の 1 つは、有効な XML が持つことができるルート ノードは 1 つだけであるため、XSLT を実行する前に、すべての table-text 要素を別の要素でラップする必要があることです。

firstname、lastname、または email 要素が欠落していない限り、これは非常に簡単です。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="/">
        <table>
            <tr>
                <xsl:apply-templates select="//firstname"/>
            </tr>
            <tr>
                <xsl:apply-templates select="//lastname"/>
            </tr>
            <tr>
                <xsl:apply-templates select="//email"/>
            </tr>
        </table>
    </xsl:template>

    <xsl:template match="firstname">
        <td><xsl:apply-templates /></td>
    </xsl:template>

    <xsl:template match="lastname">
        <td><xsl:apply-templates /></td>
    </xsl:template>

    <xsl:template match="email">
        <td><xsl:apply-templates /></td>
    </xsl:template>

</xsl:stylesheet>

いくつかの要素が欠落している可能性がある場合、これはかなり困難になります。うまくいけば、これで十分です。

于 2012-11-16T04:43:30.933 に答える