2013-10-11 2 views
0

У меня есть следующий XML:Как вы рассчитываете количество результатов, возвращаемых из цикла xsl: for-each, содержащего другую функцию XQuery?

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="count-example.xsl"?> 
<musiclist> 
<mp3> 
    <id>MP1003</id> 
    <artist>Frank Sinatra</artist> 
    <title>Fly Me To The Moon</title> 
    <location path="home/music/sinatra/MP1008.mp3" /> 
</mp3> 
<mp3> 
    <id>MP1004</id> 
    <artist>Frank Sinatra</artist> 
    <title>New York, New York</title> 
    <location path="home/music/sinatra/MP1004.mp3" /> 
</mp3> 
<mp3> 
    <id>MP1005</id> 
    <artist>Frank Sinatra</artist> 
    <title>Young At Heart</title> 
    <location path="home/music/sinatra/MP1009.mp3" /> 
</mp3> 
</musiclist> 

и следующий XSL:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="musiclist"> 
    <xsl:for-each select="mp3"> 
     <xsl:variable name="idvar" select="id" /> 
     <xsl:if test="contains(location/@path, $idvar) = 0"> 
      false 
     </xsl:if> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

XSL выход будет ложных дважды, потому что захват ID я не в атрибуте пути в элементе местонахождения как I хотел бы.

Как подсчитать этот результат, т. Е. Вывести номер 2 в качестве полного результата этого XSL?

ответ

0

Вам не нужно XSL: для каждого- здесь, вы можете использовать счетчик функция для подсчета количества узлов, совпадающие с заданными критериями

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="musiclist"> 
     <xsl:value-of select="count(mp3[contains(location/@path, id) = 0])" /> 
    </xsl:template> 
</xsl:stylesheet> 

Выражение может быть лучше повторно -писано как <xsl:value-of select="count(mp3[not(contains(location/@path, id))])" />, хотя, учитывая, что содержит, возвращается либо true, либо false.

+0

Да, в XPath 2.0 сравнение логического числа с целым числом недопустимо. –

Смежные вопросы