xml - XPATH 按位置选择返回不连贯的结果

标签 xml xslt xpath

我需要一些帮助来解决我无法弄清楚的问题。

我有以下 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 应用程序,样式表仅用于测试。

最佳答案

//pregunta 放在括号中。将您的 XPath 表达式更改为 (//pregunta)[1]/@id(//pregunta)[2]/@id ...

没有括号,例如//pregunta[4] 计算所有位于其父元素第四个位置的 pregunta 元素。

但是 (//pregunta)[4] 首先计算所有 pregunta 元素的序列,然后取该序列的第四个元素。

关于xml - XPATH 按位置选择返回不连贯的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545856/

相关文章:

xml - 在 Eclipse 中查看大型 XML 文件?

java - Android:创建一个透明盒子,里面有元素

php - 如何在PHP中解析XML,生成动态SQL插入语句

xml - 如何以编程方式授予用户权限?

java - 使用递归 xsl 文件

xml - 在 XQuery 中,如何根据给定谓词递归过滤后代?

xml - 使用 xsl 计算 xml 节点中的单词数

javax.xml.xpath jar/src 可用吗?

xpath - Selenium :如何断言选中的所有复选框?

用于选择 <strong> 标记后的文本的 xpath 语法