在XSLT中添加元素之间的换行符

时间:2016-04-24 13:25:41

标签: xml xslt newline

我开始使用XML和XSLT,我遇到了添加新行beetwen元素的问题

这里的XML:

<?xml version="1.0" encoding="UTF-8"?>
<numbers>
    <person id="1">
        <phone>
         <phone_nr>111111111</phone_nr>
         <phone_nr>222222222</phone_nr>
        </phone>
    </person>
    <person id="2">
        <phone>
          <phone_nr>333333333</phone_nr>
            </phone>
    </person>
</numbers>

XSLT看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <xsl:for-each select="numbers/person">
    <table border="1">
      <tr>
       <td>
       <table>
         <td><xsl:value-of select="phone"/></td>
       </table>
      </td>
     </tr>
    </table>
    </xsl:for-each>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

它给了我(带边框):

111111111 222222222
333333333

但我想要的是:

111111111
222222222
333333333

问题是XML必须是这样的,我不知道如何在XSLT中创建新行。

2 个答案:

答案 0 :(得分:2)

您正在输出HTML,因此要做一个&#34;换行符&#34;您需要输出<br>标记。您目前遇到的问题是您正在输出phone元素的文本值,该元素将其下的所有文本节点连接在一起。您确实需要单独处理子phone_nr个节点,例如xsl:for-each

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

试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <xsl:for-each select="numbers/person">
    <table border="1">
      <tr>
       <td>
           <xsl:for-each select="phone/phone_nr">
              <xsl:value-of select="."/><br />
           </xsl:for-each>
        </td>
     </tr>
    </table>
    </xsl:for-each>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

如果不知道确切输出应该是什么,很难回答你的问题。按照你向我们展示的内容,最简单的方法是:

<xsl:template match="/numbers">
    <table border="1">
        <xsl:for-each select="person/phone/phone_nr">
            <tr>
                <td><xsl:value-of select="."/></td>
            </tr>
        </xsl:for-each>
    </table>
</xsl:template>