2010-07-27 176 views
0

我試着在這裏搜索我的問題,並沒有成功。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> 

我有兩個的for-each語句檢查我的XSD爲true或false值:

<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"/> 

上面沒有爲我工作。我也試過true()/false(),這似乎也失敗了。

我錯過了一些明顯的東西嗎?

編輯: 布爾值是在Alfresco CMS中的複選框,所以我不能簡單地檢查它的存在,而是它是真是假。

<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> 

回答

1

針對比較的值「真」和「假」,以及「1」和「0」:

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

因爲一個xs:boolean元件的可能的值是這四個值。

在XPath 2.0中,您可以使用boolean()函數來投射它們。由於這不適合你,我假設你正在使用XPath 1.0。

+0

所以像這樣'$ all_events [boolean(g:active)= 1]'? – balexander 2010-07-27 13:11:12

+0

不需要這樣的比較。 '$ all_events [boolean(g:active)]'會做得很好。如果您需要比較某些內容,請與實際布爾值進行比較,如下所示:'$ all_events [boolean(g:active)= true()]'。再次,這不是必要的。 – Welbog 2010-07-27 13:12:21

+0

我相信我必須指定它是真是假,因爲現在是否複選框被選中或不顯示。添加「true()」的事件不起作用。 – balexander 2010-07-27 13:18:12