2010-07-27 6 views
0

J'ai essayé de rechercher mon problème ici et je n'ai pas réussi.Valeur booléenne XSLT

<xsl:for-each select="$all_events[g:active = 1]"> 
     <xsl:sort select="g:event_date" order="descending"/> 
     <xsl:variable name="fileName"><xsl:value-of select="fn:replaceAll(string(@alf:file_name), '.xml', '.html')"/></xsl:variable> 
     <xsl:variable name="fileURL"><xsl:value-of select="concat('/events/', $fileName)" /></xsl:variable> 
     <xsl:variable name="fileDate"><xsl:value-of select="g:event_date" /></xsl:variable> 
     <xsl:variable name="date"><xsl:value-of select="substring($fileDate, 6, 2)" /></xsl:variable> 
     <li><a href="{$fileURL}"><xsl:value-of select="g:event_title"/></a></li> 
    </xsl:for-each> 
    </ul><br/> 
    <xsl:for-each select="$all_events[g:body/g:current = 1]"> 
     <xsl:for-each select="g:body"> 
      <h2 class="normal"><xsl:value-of select="g:sub_title" /></h2> 
       <xsl:for-each select="g:paragraphs"> 
        <xsl:value-of select="g:paragraph" disable-output-escaping="yes"/> 
       </xsl:for-each> 
     </xsl:for-each> 
    </xsl:for-each> 

J'ai deux pour-chaque vérification des déclarations de mon XSD pour une valeur vraie ou fausse:

<xs:simpleType name="confirm"> 
     <xs:restriction base="xs:boolean"/> 
</xs:simpleType> 

<xs:element name="active" type="g:confirm" minOccurs="0"/> 
<xs:element name="current" type="g:confirm" minOccurs="0"/> 

ci-dessus ne fonctionne pas pour moi. J'ai également essayé true()/false() qui semblait avoir échoué aussi bien.

Est-ce que quelque chose me manque? Les valeurs booléennes sont des cases à cocher dans Alfresco CMS, donc je ne peux pas simplement vérifier son existence mais plutôt si elle est vraie ou fausse.

<xs:simpleType name="confirm"> 
     <xs:restriction base="xs:boolean"/> 
</xs:simpleType> 
<xs:element name="content"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="page_title" type="xs:normalizedString" minOccurs = "0"> 
       <xs:annotation> 
        <xs:appinfo> 
         <alf:appearance>title</alf:appearance> 
        </xs:appinfo> 
       </xs:annotation> 
      </xs:element> 
      <xs:element name="event_title" type="xs:normalizedString" minOccurs = "0"> 
       <xs:annotation> 
        <xs:appinfo> 
         <alf:appearance>title</alf:appearance> 
        </xs:appinfo> 
       </xs:annotation> 
      </xs:element> 
      <xs:element name="active" type="g:confirm" minOccurs="0"/> 
      <xs:element name="event_date" type="xs:date" /> 
      <xs:element name="body" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="sub_title" type="xs:normalizedString" minOccurs = "0"> 
          <xs:annotation> 
           <xs:appinfo> 
            <alf:appearance>title</alf:appearance> 
           </xs:appinfo> 
          </xs:annotation> 
         </xs:element> 
         <xs:element name="current" type="g:confirm" minOccurs="0"/> 
         <xs:element name="paragraphs" minOccurs="0" maxOccurs="unbounded"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="paragraph" type="xs:string" minOccurs = "0"> 
             <xs:annotation> 
              <xs:appinfo> 
               <alf:appearance>custom</alf:appearance> 
              </xs:appinfo> 
             </xs:annotation> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Répondre

1

Comparer contre les valeurs « vrai » et « faux », ainsi que « 1 » et « 0 »:

$all_events[(g:active = 'true') or (g:active = 1)] 

Parce que les valeurs possibles d'un élément xs:boolean sont ces quatre valeurs.

Dans XPath 2.0, vous pouvez les diffuser à l'aide de la fonction boolean(). Comme cela ne fonctionne pas pour vous, je suppose que vous utilisez XPath 1.0.

+0

Donc, comme ceci '$ all_events [boolean (g: active) = 1]'? – balexander

+0

Non. Il n'y a pas besoin de comparaisons comme ça. '$ all_events [booléen (g: actif)]' fera l'affaire. Si vous avez besoin de comparer quelque chose, comparez-le à une valeur booléenne réelle, comme ceci: '$ all_events [boolean (g: active) = true()]'. Encore une fois, ce n'est pas nécessaire. – Welbog

+0

Je crois que je dois spécifier si c'est vrai ou faux parce que maintenant, que la case soit cochée ou non, elle s'affiche. L'événement ajoutant 'true()' n'a pas fonctionné. – balexander

Questions connexes