Estoy seguro de que este es fácil, pero simplemente no veo la madera para los árboles.Cómo contar elementos con el mismo valor de atributo
estoy teniendo un XML que se parecen a esto:
<root>
<profil>
<e1 a="2">1</e1>
<m1 a="3">1</m1>
<e2 a="4">1</e2>
<m2 a="5">1</m2>
</profil>
<profil>
<e1 a="5">1</e1>
<m1 a="3">1</m1>
<e2 a="4">1</e2>
<m2 a="4">1</m2>
</profil>
<profil>
<e1 a="7">1</e1>
<m1 a="7">1</m1>
<e2 a="4">1</e2>
<m2 a="2">1</m2>
</profil>
</root>
Ahora quiero saber cuántos/m */@ a es igual a E */@ A por/profil. Así me ocurrió con la siguiente XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="*">
<xsl:element name="root">
<xsl:for-each select="/root/profil">
<xsl:element name="count">
<xsl:value-of select="count(*[contains(name(), 'm') and ./@a = //*[contains(name(),'e')]/@a])"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Pero el resultado es falso:
<root>
<count>1</count>
<count>1</count>
<count>2</count>
</root>
Cabe
<root>
<count>0</count>
<count>1</count>
<count>1</count>
</root>
¿Alguien tiene una sugerencia de lo que estoy haciendo mal ?
+1 para la buena pregunta. –
Buena pregunta, +1. Vea mi respuesta para una solución completa, corta y fácil que utiliza la función XPath estándar más adecuada en su caso: 'starts-with()'. :) –
He cambiado el título para que coincida mejor con el contenido de su pregunta. puede volver al original si le interesa. –