Necesito contar la cantidad de elementos en un archivo XML que tienen un valor particular (para verificar la exclusividad). El archivo XML se ve así:Elementos de conteo XSLT con un valor dado
EDIT: Actualicé el XML original "simplificado" con el verdadero desastre peludo que alguien diseñó. Desafortunadamente, esto hará que todas las respuestas anteriores sean realmente confusas y erróneas a menos que se editen.
<root>
<ac>
<Properties>
<Property Name="Alive">
<Properties>
<Property Name="ID">
<Properties>
<Property Name="Value">
<long>11007</long>
</Property>
</Properties>
</Property>
</Properties>
</Property>
<Property Name="Dead">
<Properties>
<Property Name="ID">
<Properties>
<Property Name="Value">
<long>11008</long>
</Property>
</Properties>
</Property>
</Properties>
</Property>
...
<Property Name="MostlyDeadAllDay">
<Properties>
<Property Name="ID">
<Properties>
<Property Name="Value">
<long>99001</long>
</Property>
</Properties>
</Property>
</Properties>
</Property>
</Properties>
</ac>
</root>
estoy tratando de definir una variable para ver cómo muchas de las propiedades a nivel Alive/Dead tiene el valor largo (ID) como se define en un parámetro de plantilla. Algo a lo largo de estas líneas (aunque sospecho que esto está mal) ...
<xsl:param name="parPropId"/>
<xsl:variable name="countProperties">
<xsl:value-of select="count(/root/ac/
Properties/Property/
Properties/Property[@Name = 'ID']/
Properites/Property[@Name = 'Value']/long = $parPropId)"/>
</xsl:variable>
No puede haber múltiples elementos de propiedad definida en el nivel "ID". Pero estoy bastante seguro de que puedo contar con un solo elemento de propiedad ("Valor") en "ID", y solo un elemento "largo" en "Valor".
[cláusula de exención de responsabilidad] Quien diseñó el archivo XML en general, estoy trabando con REALMENTE no sabía cómo estructurar XML (por ejemplo, uso de atributos hacia atrás versus elementos). Me temo que mi pensamiento XSLT se ha deformado temporalmente :) como resultado. [/ disclaimer]
¿Por qué la expresión XPath ha mostrado "incorrecta"? No veo nada malo con eso. – Cerebrus
No estoy seguro. Simplifiqué el XML de arriba. El xpath real es este: "/// Properties/Property/Properties/Property [@Name = 'ID']/Properties/Property [@Name = 'Value']/long". Si está en lo cierto, podría reemplazar "/ long" con "[long = $ parPropId]". Parece incorrecto ya que eso pondría dos operaciones "[]" juntas. –
Verifiqué que el texto de vartec() da el texto correcto (es decir, "/// Propiedades/Propiedad/Propiedades/Propiedad [@Name = 'ID']/Propiedades/Propiedad [@Name = 'Valor']/largo/texto () "obtiene mi ID, pero mi conteo usando su método todavía está fallando. –