2016-03-01 6 views
0

У меня есть файл XML в этом ключе:Проверьте, сколько детей узел имеет

<manual> 
    <chapter> 
     <section /> 
     <section /> 
     <section /> 
    </chapter> 
    <chapter> 
     <section> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
      <section /> 
     </section> 
     <section /> 
     <section /> 
    </chapter> 
</manual> 

В то время как я обработки <manual> узла, я хочу, чтобы выяснить, есть ли <section> узла, который имеет более 9 детей.

Мой первоначальный подход был такой:

if test="//section[count(child::section &gt; 9)]" 

Это не работает потому, что выход счетчика() является целым числом, а в разделе [] ожидает, что набор узлов.
что-то вроде count (// section/section) не будет работать, потому что это будет считать все разделы, а не только один набор братьев и сестер.

Есть ли способ достичь этого?

ответ

2

Я думаю, что вы хотите //section[count(section) > 9], оператор сравнения не входит в вызов функции count, как и у вас.

0

вы можете использовать счетчик (./ раздел) + счетчик (./ раздел/раздел), чтобы найти общее количество секции, ниже код зная положение узла и подсчета секции

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
<xsl:for-each select="/manual/chapter"> 
<xsl:if test="count(./section) + count(./section/section) > 9"> 
<xsl:value-of select="position()"/>,<xsl:value-of select="count(./section)  + count(./section/section) "/> 
</xsl:if> 
</xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Общее кол-во . Полезно для других приложений, но я искал «узел с более чем 9 детьми». – Hobbes

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