2

いくつかのブールフィールド値が真である場合にのみ、それらの値の数を見つけなければならない状況があります。

入力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']
    ]
  )
"/> 

私はそれを乗り越えるために一生懸命努力してきたので、私は本当に誰かからこれを手伝う必要があります。前もって感謝します。

4

1 に答える 1

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

これがあなたのが機能しない理由です:

アプローチの角かっこは、ノードセット上に述語を作成します。

そのノードセットは、条件を満たしたすべての言及された子ノードの結合でした。空でないノードセットは、に評価されtrue、空でないノードセットはに評価されfalseます。

結果として、あなたcount()は常に1子供たちのいずれかが真実である場合になり0、すべての子供たちが偽である場合に常になります。

つまり、1つの<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']
  )
" />
于 2012-08-14T14:43:01.970 に答える