我开始使用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中创建新行。
答案 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>