你好,我试图只展示voorgerechten和hoofdgerechten。目前我正在输出:
这是xml代码:
<?xml version="1.0"?>
<?xml-stylesheet href="menuFromattributeToElement.xslt" type="text/xsl"?>
<menu>
<voorgerechten>
<gerecht id="1" prijs="3.95">Groene salade</gerecht>
<gerecht id="2" prijs="4.35">Tomatensoep</gerecht>
<gerecht id="3" prijs="9.95">Carpaccio</gerecht>
</voorgerechten>
<hoofdgerechten>
<gerecht id="4" prijs="19.95">Gegrilde ossehaas</gerecht>
<gerecht id="5" prijs="15.95">Linguini al Pesto</gerecht>
<gerecht id="6" prijs="18.95">Gepocheerde zalm</gerecht>
</hoofdgerechten>
<desserts>
<gerecht id="7" prijs="5.95">Dame Blanche</gerecht>
<gerecht id="8" prijs="7.45">Banana Split</gerecht>
</desserts>
</menu>
这是xslt代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<table border="1px">
<tr>
<td colspan="6" align="center">
<h2> Gerechten</h2>
</td>
</tr>
<tr>
<th>Naam</th>
<th>Prijs</th>
<th>ID</th>
</tr>
<xsl:for-each select="//gerecht">
<tr>
<td>
<xsl:value-of select="text()"/>
</td>
<td>
<xsl:value-of select="translate(@prijs, '.', ',')"/>
</td>
<td>
<xsl:value-of select="@id"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在xslt文件中,我已经尝试替换:
<xsl:for-each select="//gerecht">
用这个:
<xsl:for-each select="//menu/voorgerechten/gerecht or //menu/hoofdgerechten/gerecht">
因此它只输出居住在voorgerechten或hoofdgerecht内的gerecht。但遗憾的是我的代码无效。
答案 0 :(得分:2)
你真的很亲近。你不想要or
,你想要|
<xsl:for-each select="/menu/voorgerechten/gerecht | /menu/hoofdgerechten/gerecht">
原因是:or
是逻辑运算符,|
是union运算符。当您使用or
时,您正试图让select
使用布尔值(true
或false
),这并不是真的有意义。当您使用union运算符时,您现在正在处理节点集的并集,这是select
正在寻找的。另外,您在开头不需要//
,因为它只是一个<menu>
元素,因为它是根元素。
您可能需要考虑将for-each重构为模板,或者几个模板 - 这样可以更轻松地稍后更改其中一个或另一个类型,或者添加其他类型。但是for-each
在这里工作得很好,所以这取决于你。
这是XSLTransform: http://xsltransform.net/eiZQaFx