XPATH: как получить длину 1-й группы элементов и длину 2-й группы элементов внутри 1-й группы? - PullRequest
1 голос
/ 23 октября 2019

Я работаю с XML-файлами, структура которых указана ниже.

<GroupType1> и <GroupType2> необходимо обрабатывать отдельно.

В любом случае я хочу выполнить циклчерез <OperationEvent> элементов в каждом <OperationStage> с использованием XPATH.

Итак, для каждого <GroupType1> мне нужно получить число <OperationStage> в <OperationStageCollection>, а затем получить число <OperationEvent> в <OperationEventCollection> текущего <OperationStage>.

В псевдокоде обработка будет выглядеть так:

    For i = 1 to number of <OperationStageCode> in current <OperationStage> of current <GroupType1>
        For j = 1 to number of <OperationEvent> in ith <OperationStage> in the current <GroupType1>
            process jth <OperationEvent> of ith <OperationStage>
        Next J
    Next i

И тогда я сделаю то же самое для <GroupType2>

Я застрял, пытаясь получить число <OperationStage> в <OperationStageCollection> и число <OperationEvent> в <OperationEventCollection> текущего <OperationStage>.

У меня естьпробовал различные выражения, такие как:

i = xDOC.selectNodes("//OperationStage").length

Но, конечно, это всего лишь общее количество <OperationStage> во всем <GroupCollection>. Другие выражения, которые я пробовал (ниже), все возвращают ноль. Как вы можете видеть, я просто колеблюсь здесь - обнажая свое незнание синтаксиса обхода XPATH.

i = xDOC.selectNodes("/OperationStage").length
i = xDOC.selectNodes("OperationStageCollection//catmk:ProceedingStage").length
i = xDOC.selectNodes("OperationStageCollection/catmk:ProceedingStage").length
i = xDOC.selectNodes("/OperationStageCollection/catmk:ProceedingStage").length

Какой правильный синтаксис для получения числа <OperationStage> в <OperationStageCollection>один <GroupType1>, затем получите число <OperationEvent> в <OperationEventCollection> текущего <OperationStage>?

Я просмотрел много документации XPATH, но ничего не нашелс полезными примерами в приблизительной ситуации. Пожалуйста, укажите мне такую ​​документацию, если вам это известно.

Вот структура xml:

<GroupCollection>
    <Groups>
        <GroupType1>
            <GroupType1_Identifier>1</GroupType1_Identifier>
            <OperationStageCollection>
                <OperationStage>
                     <OperationStageCode>3</OperationStageCode>
                        <OperationEventCollection>
                            <OperationEvent>
                                <OperationEventDate1>2018-12-16</OperationEventDate1>
                                <OperationEventCode>5</OperationEventCode>
                                <OperationEventDate2>2018-05-16</OperationEventDate2>
                            </OperationEvent>
                            ... more OperationEvents ...
                        </OperationEventCollection>
                </OperationStage>
                ... more OperationStages ...
            </OperationStageCollection>
        </GroupType1>
        ...moreGroupType1...
         <GroupType2>
            <GroupType2_Identifier>3</GroupType2_Identifier>
            <OperationStageCollection>
                <OperationStage>
                    <OperationStageCode>101</OperationStageCode>
                        <OperationEventCollection>
                            <OperationEvent>
                                <OperationEventCode>6</OperationEventCode>
                                <OperationEventDate2>2012-01-03</OperationEventDate2>
                            </OperationEvent>
                            ... more OperationEvents ...
                        </OperationEventCollection>
                </OperationStage>
                ... more OperationStages ...
            </OperationStageCollection>
        </GroupType2>
        ...moreGroupType2...
    </Groups>
</GroupCollection>

1 Ответ

0 голосов
/ 24 октября 2019

Строго говоря, с точки зрения выражений xpath, я считаю,

//GroupType1/OperationStageCollection/count(OperationStage)

должно дать вам число <OperationStage> с в <OperationStageCollection> одного <GroupType1> и

//GroupType1/OperationStageCollection/OperationStage//OperationEventCollection/count(OperationEvent)

должно получить количество <OperationEvent> с в <OperationEventCollection> текущего <OperationStage>.

...