Выражение счетчика XPath не возвращает допустимое число

Есть ли способ изменить следующее выражение XPath, чтобы вернуть количество предыдущих «похожих» элементов? Мне нужен относительный подсчет количества похожих узлов в данной ветке (я думаю, что это ветка...). Это используется в MS InfoPath:

count(../preceding-sibling::*) + 1

Я полагаю, что структура моего образца XML не позволяет ему работать должным образом. Вы заметите, что все значения «Количество» в моем XML имеют номер 1. Значение DateRepeaterCounter должно сбрасываться в новом узле MasterRepeater, а MasterRepeaterCounter должно отражать общее количество узлов MasterRepeater.

Мне еще предстоит преодолеть кривую обучения с XPath.

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.25" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Chris\Local%20Settings\Application%20Data\Microsoft\InfoPath\Designer3\e1d38b31bb224d94\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?>
<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-09-07T14:19:10" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
<my:PrimarySection>
    <my:MasterRepeater>
        <my:MasterRepeaterCounter>1</my:MasterRepeaterCounter>
        <my:DateSection>
            <my:DateRepeater>
                <my:Date>2012-09-12</my:Date>
                <my:DateRepeaterCounter>1</my:DateRepeaterCounter>
            </my:DateRepeater>
            <my:DateRepeater>
                <my:Date>2012-09-13</my:Date>
                <my:DateRepeaterCounter>1</my:DateRepeaterCounter>
            </my:DateRepeater>
            <my:DateRepeater>
                <my:Date>2012-09-14</my:Date>
                <my:DateRepeaterCounter>1</my:DateRepeaterCounter>
            </my:DateRepeater>
            </my:DateSection>
    </my:MasterRepeater>
    <my:MasterRepeater>
        <my:MasterRepeaterCounter>1</my:MasterRepeaterCounter>
        <my:DateSection>
            <my:DateRepeater>
                <my:Date>2012-09-15</my:Date>
                <my:DateRepeaterCounter>1</my:DateRepeaterCounter>
            </my:DateRepeater>
            <my:DateRepeater>
                <my:Date>2012-09-16</my:Date>
                <my:DateRepeaterCounter>1</my:DateRepeaterCounter>
            </my:DateRepeater><my:DateRepeater>
                <my:Date>2012-09-17</my:Date>
                <my:DateRepeaterCounter>1</my:DateRepeaterCounter>
            </my:DateRepeater>
    </my:DateSection>
    </my:MasterRepeater>
</my:PrimarySection>
</my:myFields>

ИЗМЕНИТЬ И ОТВЕТИТЬ

InfoPath как-то испортил выражение... После ввода выражения в одно поле и последующего копирования его в другое оно перестало работать правильно. При повторном вводе выражения в формате, указанном выше, проблема была решена. Я сам отвечу, когда StackOverflow позволит это. Спасибо!


person Shrout1    schedule 12.09.2012    source источник
comment
С какого узла вы хотите начать? Какие узлы вы хотите посчитать? Можете быть более конкретными?   -  person choroba    schedule 12.09.2012
comment
Перечисленное выражение XPath существует в каждом узле со словом Counter в его имени. То, что вы видите в XML, является результатом (текущим результатом) этого выражения. Я предполагаю, что это означает, что он должен считать от своего собственного местоположения назад, и любой узел со словом "счетчик" в имени должен содержать этот счетчик. Извините за расплывчатость, я медленно учусь задавать правильные вопросы.   -  person Shrout1    schedule 12.09.2012
comment
Хорошо, я сам отвечу на этот. Это была проблема с InfoPath, а не с XPath. Выражение XPath, которое у меня есть, отлично работает, просто InfoPath неправильно его интерпретировал... Как-то выражение просто увеличилось по пути. Когда я повторно ввел его в том виде, в котором он был изначально отформатирован: count(../preceding-sibling::*) + 1 он заработал отлично. Итак... Еще раз спасибо Microsoft за то, что сводили меня с ума.   -  person Shrout1    schedule 12.09.2012
comment
Если вы нашли решение самостоятельно, вы можете написать ответ (не просто комментарий), а также принять его (могут применяться временные ограничения), чтобы ваш вопрос больше не всплывал как оставшийся без ответа. Удачи в дальнейшем x-pathing.   -  person m90    schedule 12.09.2012


Ответы (1)


Я сам отвечу на этот вопрос, так как это оказалось проблемой InfoPath, а не проблемой XPath. InfoPath как-то испортил выражение... После ввода выражения в одно поле и последующего копирования его в другое оно перестало работать правильно. При повторном вводе выражения в формате, указанном выше, проблема была решена. Спасибо за вашу помощь!

person Shrout1    schedule 12.09.2012