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()永远都是,如果他们都是假的,那么你永远都是。10

换句话说:您选择了一个<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 回答