如何在xslt中选择没有for-each的相同节点

时间:2015-02-11 09:49:38

标签: xml xslt

我有以下xml

    <phones>
      <phone>
        <code>+37529</code>
        <number>8546632</number>
      </phone>
      <phone>
        <code>+37517</code>
        <number>4562389</number>
      </phone>
   </phones>

我需要获取以下html表 enter image description here

在此之前我有下一个html表

enter image description here

所以我的xsl文件就像

<table>
...
   <xsl:for-each select="phones/phone">
      <tr>
         <td width="25%">Code</td>
         <td width="25%">
            <xsl:value-of select="code" />
            &#160;
         </td>
         <td width="25%">Number</td>
         <td width="25%">
            <xsl:value-of select="number" />
            &#160;
         </td>
      </tr>
   </xsl:for-each>
...
</table>

现在我应该分割手机,我不知道如何使用旧的xml文件进行xslt转换。请帮我,建立正确的xsl文件。感谢。

1 个答案:

答案 0 :(得分:0)

我“选择没有for-each的节点”的方式是使用模板。例如:

XML

鉴于以下XML(根据您的意见,我冒昧地添加@type):

<?xml version="1.0" encoding="ISO-8859-1"?>
<phones>
    <phone type="Office">
        <code>+37529</code>
        <number>8546632</number>
    </phone>
    <phone type="Mobile">
        <code>+37517</code>
        <number>4562389</number>
    </phone>
</phones>

XSL

以下XSL模板:

<xsl:template match="//phones">
    <table><xsl:apply-templates /></table>
</xsl:template>

<xsl:template match="phone">
    <tr>
        <th colspan='4'><xsl:value-of select="@type" />:</th>
    </tr>
    <tr>
        <th>Code</th><td><xsl:value-of select="code" /></td>
        <th>Number</th><td><xsl:value-of select="number" /></td>
    </tr>
</xsl:template>

提供所需的html表输出。 例如 http://xsltransform.net/gWmuiJn/1

如果要设置表格的宽度(样式),我建议使用CSS而不是width="25%"例如 http://jsbin.com/woyaga/1/edit?html,css,output