Ошибка XSLT "не элемент узла" - PullRequest
0 голосов
/ 13 января 2011

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

<xsl:key name="next-headings" 
              match="w:p[w:pPr/w:pStyle/@w:val = 'Heading3']" 
         use="generate-id((ancestor::w:sdt[1] | 
                           preceding-sibling::w:p
                                   [w:pPr/w:pStyle/@w:val = 'Heading1'] or 
                           preceding-sibling::w:p
                                   [w:pPr/w:pStyle/@w:val = 'Heading2']
                               )[last()])"/>

Я получаю ошибку "not node item", но не понимаю почему. Любая помощь в переводе этой ошибки очень ценится!

Ответы [ 2 ]

3 голосов
/ 13 января 2011

Как ответил @LarsH, оператор or имеет больший приоритет, чем оператор объединения |, и это приводит к логическому выражению, которое нельзя объединить с набором узлов.

Но,Кроме того, похоже, что вы хотите заменить оператор or на объединение |, я бы использовал это выражение:

generate-id((ancestor::w:sdt[1] |
             preceding-sibling::w:p
                [w:pPr/w:pStyle/@w:val[. = 'Heading1' or . = 'Heading2']]
            )[last()])

Edit : маленькая опечатка ...

1 голос
/ 13 января 2011

Я думаю, вам нужно изменить or на |. Вы имели в виду создание набора узлов с помощью объединения (|), но оператор or возвращает логическое значение, которое «не является элементом узла».

...