2012-08-14 18 views
2

我有一種情況,我必須找到幾個布爾字段值的計數,只有它們是真的。只通過XPath計算特定的孩子

輸入XML:

<PersonInfo> 
    <ArrayOfPersonInfo> 
    <CertAsAdultFlag>true</CertAsAdultFlag> 
    <DeceasedFlag>true</DeceasedFlag> 
    <WantedFlag>false</WantedFlag> 
    <CPSORFlag>true</CPSORFlag> 
    <ConditonalReleaseFlag>false</ConditonalReleaseFlag> 
    <ProbationFlag>true</ProbationFlag> 
    <MissingFlag>true</MissingFlag> 
    <ATLFlag>true</ATLFlag> 
    <CCWFlag>false</CCWFlag> 
    <VictimIDTheftFlag>true</VictimIDTheftFlag> 
    </ArrayOfPersonInfo>  
</PersonInfo> 

我需要找到這些標誌與條件的計數,如果他們是'true'

這裏是我的嘗試和失敗有:

<xsl:variable name="AlertCount" select=" 
    count(
    PersonInfo/ArrayOfPersonInfo[ 
     CPSORFlag[.='true'] | CertAsAdultFlag[.='true'] | 
     DeceasedFlag[.='true'] | WantedFlag[.='true'] | 
     ConditonalReleaseFlag[.='true'] | MissingFlag[.='true'] | 
     ATLFlag[.='true'] | ProbationFlag[.='true'] | CCWFlag[.='true'] | 
     VictimIDTheftFlag[.='true'] | CHRIFlag[.='true'] | 
     CivilWritFlag[.='true'] | MentalPetitionFlag[.='true'] | 
     ProtectionOrderFlag[.='true'] | juvWantedFlag[.='true'] | 
     WeaponsFlag[.='true'] | WorkCardFlag[.='true'] 
    ] 
) 
"/> 

我真的需要這方面的幫助從別人,因爲我一直在努力通過它來獲得。提前致謝。

回答

0
<xsl:variable name="AlertCount" select="count(PersonInfo//*[. = 'true'])" /> 

這也是爲什麼你的不工作:

的方括號在你的方法創建了一個節點集的謂語。

該節點集合是所有提到的滿足其條件的子節點的聯合。非空節點集的計算結果爲true,非空節點集爲false

因此,如果任何一個孩子都是真的,那麼您的count()將始終爲1,並且如果所有孩子都是假的,則始終爲0

換句話說:您選擇了一個<ArrayOfPersonInfo>節點。如果它滿足條件(有任何數量的兒童'true'作爲它們的價值),它被計數,否則不計算。


澄清意見後(「我只需要擔心我在上面提到的XML標誌」):

<xsl:variable name="AlertCount" select=" 
    count(
    PersonInfo//*[ 
     self::CPSORFlag or 
     self::CertAsAdultFlag or 
     self::DeceasedFlag or 
     self::WantedFlag or 
     self::ConditonalReleaseFlag or 
     self::MissingFlag or 
     self::ATLFlag or 
     self::ProbationFlag or 
     self::CCWFlag or 
     self::VictimIDTheftFlag or 
     self::CHRIFlag or 
     self::CivilWritFlag or 
     self::MentalPetitionFlag or 
     self::ProtectionOrderFlag or 
     self::juvWantedFlag or 
     self::WeaponsFlag or 
     self::WorkCardFlag 
    ][. = 'true'] 
) 
" /> 
+0

嗨託默勒格。謝謝回覆。對不起,我應該在早些時候說清楚。在上面我沒有提到的同一個XML中還有其他標誌,我只需要擔心我在上面的XML中提到的標誌。如果我使用您的答案,它會給出所有其他標誌的計數。你現在可以幫我嗎? – Harsh 2012-08-14 15:05:35

+0

非常感謝我爲什麼我的代碼不工作的澄清..但是,請你告訴我什麼是正確的方法..只需在你的迴應中包含2-3個標誌。再次感謝您的幫助。 – Harsh 2012-08-14 15:13:50

+0

@Harshavardhan查看修改答案。 – Tomalak 2012-08-14 15:14:02