Я заранее прошу прощения, если это неправильно отформатировано, но ...
Мне нужно взять следующий xml:
<box r="?" c="?" b="?">
<h r="?" b="2">
<u>
<v c="5" b="2">
<l>
<h r="?" b="1"/>
</l>
<r>
<v c="?" b="?"/>
</r>
</v>
</u>
<d>
<h r="?" b="2"/>
</d>
</h>
</box>
и использовать xslt:
<xsl:template name="BoxVariables-Count">
<xsl:text>
// Counting...</xsl:text>
<xsl:apply-templates select="descendant::*[@* = "?"]" mode="box-variable-count"/>
</xsl:template>
<xsl:template match="local:*" mode="box-variable-count">
<xsl:variable name="position" select="position()"/>
<xsl:text>
// </xsl:text></xsl:text><xsl:value-of select="local-name()"/>
<xsl:text> = </xsl:text>
<xsl:value-of select="count((ancestor::local:box[1]/descendant-or-self::*[@* = "?"][position() < $position + 1])/@*[@* = "?"])"/>
</xsl:template>
считать число "?"записи атрибутов, которые появляются перед текущим узлом в элементе box.(Примечание: «?» На самом деле «Неизвестно»)
Следующая строка выводит общее количество атрибутов в узлах, содержащих «?» Перед текущим узлом:
<xsl:value-of select="count((ancestor::local:box[1]/descendant-or-self::*[@* = "?"][position() < $position + 1])/@*)"/>
выходы:
// h = 3
// h = 5
// v = 7
// h = 9
НО, я хочу только посчитать количество "?"атрибуты в этом наборе.
<xsl:value-of select="count((ancestor::local:box[1]/descendant-or-self::*[@* = "?"][position() < $position + 1])/@*[@* = "?"])"/>
выводит:
// h = 0
// h = 0
// v = 0
// h = 0
и я хочу:
// h = 3
// h = 4
// v = 5
// h = 7
Другими словами:
count(./@*[@* = "?"])
кажется, возвращает 0, а не количество атрибутов внутри себя, которые установлены в "?".
Было бы хорошо, если бы мне не пришлось писать рекурсив?счетчик ...