Запрос Xpath с несколькими условиями в XML - PullRequest
0 голосов
/ 04 октября 2018

XML может выглядеть как спам, но из-за чувствительности данных мне пришлось удалить данные на нем.Оригинальный размер XML был 15 МБ.:)

Ниже приведен XML-код, который я пытаюсь запросить в количестве элементов / узлов фондов, которые имеют "| 40 |"как подстрока в атрибуте 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 голосов
/ 05 октября 2018
count(.//FundGroups/FundGroup/FundGroups/FundGroup[contains(@FundGroupIDConcat,'|40|')]/FundList/Fund[@PegStatusCurr = 1])

Это даст счет средств

0 голосов
/ 04 октября 2018

Чтобы получить уникальное совпадение, используйте следующее выражение:

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

A count(...) выражение, которое возвращает 1 элементов в качестве результата в примере XML.

Остается одна проблема - значения 40 без | до или после значения.
Но вы об этом не просили, так что это может вообще не быть проблемой ...

...