我有一个XML,我需要从所有节点中选择特定元素,对于所选元素,我需要从节点子集中选择值。实际XML的结构如下所示 -
<Host>
<Node>
<element1>type0</element1>
<element2>Fruits0</element2>
</Node>
<Node>
<element1>type1</element1>
<element2>Fruits1</element2>
</Node>
<Node>
<element1>type2</element1>
<element2>
<Namelist>
<Names>
<element2>fruit2</element2>
<Node>
<element1>type3</element1>
<element2>Fruits3</element2>
</Node>
</Names>
</Namelist>
</element2>
</Node>
<Node>
<element1>type4</element1>
<element2>Fruits4</element2>
</Node>
<Node>
<element1>type5</element1>
<element2>Fruits5</element2>
</Node>
</Host>
现在预期的输出XML如下 -
<html>
<body>
<table border="1">
<tr>
<td>type0</td>
<td>Fruits0</td>
</tr>
<tr>
<td>type1</td>
<td>Fruits1</td>
</tr>
<tr>
<td>type2</td>
<td>Fruits2</td>
</tr>
<tr>
<td>type3</td>
<td>Fruits3</td>
</tr>
<tr>
<td>type4</td>
<td>Fruits4</td>
</tr>
<tr>
<td>type5</td>
<td>Fruits5</td>
</tr>
</table>
</body>
</html>
编写的XSLT如下 -
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:for-each select="Host">
<xsl:for-each select="//Node">
<xsl:sort select="element1" />
<tr>
<td><xsl:value-of select="element1" /></td>
<td><xsl:value-of select="element2" /></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出不符合预期 -
<html>
<body>
<table border="1">
<tr>
<td>type0</td>
<td>Fruits0</td>
</tr>
<tr>
<td>type1</td>
<td>Fruits1</td>
</tr>
<tr>
<td>type2</td>
<td>Fruits2Fruits3</td>
</tr>
<tr>
<td>type3</td>
<td>Fruits3</td>
</tr>
<tr>
<td>type4</td>
<td>Fruits4</td>
</tr>
<tr>
<td>type5</td>
<td>Fruits5</td>
</tr>
</table>
</body>
</html>
我想格式化具有数据<element2>Fruits2Fruits3</element2>
的元素的输出,该数据不应包含子节点数据。任何帮助将受到高度赞赏。谢谢。
答案 0 :(得分:0)
尝试更改:
<td><xsl:value-of select="element2"/></td>
为:
<td><xsl:value-of select="(.//element2[text()])[1]"/></td>