我遇到的情况是,只有当它们为真时我才能找到几个布尔字段值的计数。
输入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 :(得分:0)
<xsl:variable name="AlertCount" select="count(PersonInfo//*[. = 'true'])" />
这就是你的不起作用的原因:
方法中的方括号在节点集上创建谓词。
该节点集是满足其条件的所有提到的子节点的并集。非空节点集的计算结果为true
,非{ - 1}}非空表示。
因此,如果任何一个孩子都是真的,那么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']
)
" />