XML中具有多个条件的Xpath查询

时间:2018-10-04 20:07:57

标签: xml vb.net xpath xquery

XML可能看起来像垃圾邮件,但是由于数据的敏感性,我不得不删除其上的数据。 XML的原始大小为15MB。 :)

下面是我要查询具有“ | 40 |”的Funds元素/节点数的XML作为FundGroupIDConcat 属性和 PegStatusCurr = 1

中的子字符串

我尝试评估此查询,但未能使其运行。 (我正在运行的是VB.NET)

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

XML:

<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 Query的新手,这不是我每天都要处理的问题,并且无法解决。

任何帮助都会有很大帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

一个count(...)表达式,它返回1元素作为示例XML的结果。

剩下的一个问题是40的值,在该值之前或之后没有|
但是您并没有要求它,所以这可能根本不是问题...

答案 1 :(得分:0)

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

这将提供资金的数量