代码之家  ›  专栏  ›  技术社区  ›  BetterLateThanNever

XML中带多个条件的Xpath查询

  •  0
  • BetterLateThanNever  · 技术社区  · 6 年前

    (由于我处理的XML数据的敏感性,我不得不删除其中的数据。XML的原始大小是15MB)。

    “| 40 |”作为中的子字符串 FundGroupIDConcat 属性和 PegStatusCurr = 1

    (count(.//FundGroups/FundGroup/FundGroups/FundGroup/FundList/Fund[@PegStatusCurr ,""1"")>0)
    

    <FR>
        <FundGroups>
            <FundGroup FundGroupID="-1" FundGroupIDConcat="-1|" >
                <FundGroups>
                    <FundGroup FundGroupID="100" FundGroupIDConcat="-1|100|">
                        <FundList>
                            <Fund PegStatusCurr="1" PegStatusNew="1">
                                <Name>Account</Name>
                            </Fund>
                        </FundList>
                    </FundGroup>
                    <FundGroup FundGroupID="7" FundGroupIDConcat="-1|7|">
                        <FundGroups>
                            <FundGroup FundGroupID="40" FundGroupIDConcat="-1|7|40|">
                                <FundGroups>
                                    <FundGroup FundGroupID="3240" FundGroupIDConcat="-1|7|40|3240|">
                                        <FundList>
                                            <Fund PegStatusCurr="1" PegStatusNew="1">
                                                <Name>Century One</Name>
                                            </Fund>
                                            <Fund PegStatusCurr="2" PegStatusNew="2">
                                                <Name>Century Two</Name>
                                            </Fund>
                                        </FundList>
                                    </FundGroup>
                                </FundGroups>
                            </FundGroup>                        
                        </FundGroups>
                    </FundGroup>
                </FundGroups>
            </FundGroup>
        </FundGroups>
    </FR>
    

    我对XPath查询非常陌生,在修复它时遇到了问题。

    2 回复  |  直到 4 年前
        1
  •  1
  •   zx485    6 年前

    要获得唯一匹配,请使用以下表达式:

    .//FundGroups/FundGroup/FundGroups/FundGroup/FundList/Fund[contains(@FundGroupIDConcat,'|40|') and @PegStatusCurr = 1]
    

    A count(...) 返回的表达式 1

    40 | 在值之前或之后。
    但你没有要求,所以这可能根本不是问题。。。

        2
  •  0
  •   BetterLateThanNever    6 年前
    count(.//FundGroups/FundGroup/FundGroups/FundGroup[contains(@FundGroupIDConcat,'|40|')]/FundList/Fund[@PegStatusCurr = 1])
    

    这将给出资金的数量