我需要一些我无法弄清楚的问题的帮助。
我有以下xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="prueba.xsl"?>
<ficha>
<titulo></titulo>
<bloque>
<texto></texto>
<pregunta id="1" tipo="checkSN">
<texto>Acredita curso bienestar animal minimo 20 h</texto>
</pregunta>
<pregunta id="2" tipo="texto">
<texto>Sistemática inspección</texto>
</pregunta>
<grupo>
<texto>trato adecuado enfermos</texto>
<pregunta id="3" tipo="desplegableSNP">
<texto>Recetas correspondientes</texto>
</pregunta>
<pregunta id="4" tipo="multiple">
<texto>Disponen de comida y bebida</texto>
</pregunta>
</grupo>
<grupo>
<texto>
Heridos/Enfermos
</texto>
<pregunta id="5" tipo="multiple">
<texto>Se aprecian heridos o enfermos momento inspeccion</texto>
</pregunta>
<pregunta id="6" tipo="multiple">
<texto>Separados del resto</texto>
</pregunta>
<pregunta id="7" tipo="multiple">
<texto>Disponen de comida y bebida</texto>
</pregunta>
<pregunta id="8" tipo="multiple">
<texto>Disponen de comida y bebida</texto>
</pregunta>
</grupo>
</bloque>
<bloque>
<texto>Condiciones específicas de alojamiento y manejo</texto>
</bloque>
</ficha>
以下是XSL表:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="prueba.css" />
</head>
<body>
<h2><xsl:value-of select="/ficha/titulo"/></h2>
<h3>1: <xsl:value-of select="//pregunta[1]/@id"/></h3>
<h3>2: <xsl:value-of select="//pregunta[2]/@id"/></h3>
<h3>3: <xsl:value-of select="//pregunta[3]/@id"/></h3>
<h3>4: <xsl:value-of select="//pregunta[4]/@id"/></h3>
<h3>5: <xsl:value-of select="//pregunta[5]/@id"/></h3>
<h3>6: <xsl:value-of select="//pregunta[6]/@id"/></h3>
<h3>7: <xsl:value-of select="//pregunta[7]/@id"/></h3>
<h3>8: <xsl:value-of select="//pregunta[8]/@id"/></h3>
<h3>c: <xsl:value-of select="count(//pregunta)"/></h3>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
当我加载它们时,我得到了这个结果:
1:1 2:2 3:7 4:8 5: 6: 7: 8: c:8
我不明白为什么它忽略了一些节点。如果我包含新节点或移动它们,它总是显示4个结果,从位置5到8的节点它从不显示任何内容。我需要使用这种类型的选择,因为它来自Java应用程序,样式表仅用于测试。
答案 0 :(得分:7)
将//pregunta
括在括号中。将您的XPath表达式更改为(//pregunta)[1]/@id
,(//pregunta)[2]/@id
...
没有括号,例如//pregunta[4]
评估位于其父元素第四个位置的所有pregunta
个元素。
然而(// pregunta)[4]首先计算所有pregunta
元素的序列,然后取该序列的第四个元素。
答案 1 :(得分:-1)
我无法完全解释为什么你会看到你的行为(我怀疑它可能与一个奇怪的2d数组被返回有关,但这只是我自己的狂野理论)但似乎确实存在简单的解决方法。如果你使用foreach循环(它似乎最适合你需要的东西,虽然我可能再次错了!)它返回select中的所有值,即
<xsl:for-each select="//pregunta">
<h3><xsl:value-of select="position()" /> : <xsl:value-of select="@id" /></h3>
</xsl:for-each>