En XPath 2.0 usar una sola expresión como este:
sum(../Store/@name/string-length(.))
Esto no se puede hacer con una sola XPath 1.0 expresión (una función como un paso de localización no está permitido), por lo tanto alguna se necesita ayuda con el lenguaje de alojamiento.
Por ejemplo, si el idioma de alojamiento es XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:apply-templates select="Store[@name][1]"/>
</xsl:template>
<xsl:template match="Store[@name]">
<xsl:param name="vAccum" select="0"/>
<xsl:value-of select="$vAccum + string-length(@name)"/>
</xsl:template>
<xsl:template match="Store[@name and following-sibling::Store/@name]">
<xsl:param name="vAccum" select="0"/>
<xsl:apply-templates select="following-sibling::Store[@name][1]">
<xsl:with-param name="vAccum" select="$vAccum + string-length(@name)"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
cuando se aplica esta transformación en el siguiente documento XML:
<root>
<Store name="ab"/>
<Store name="cde"/>
<Store name="fgh"/>
<Store name="ijklmn"/>
<Store name="opr"/>
</root>
el resultado deseado, correcta es producido:
XML de muestra por favor ... –
No tenemos idea de qué elemento 'Store' contiene y cuántos atributos contiene ... !! –
Solo estoy interesado en la longitud de cadena del atributo @name. –