XSLT错误“不是节点项”

时间:2011-01-13 15:02:19

标签: xslt xpath xslt-1.0

我正在尝试从平面结构创建嵌套层次结构,我使用以下密钥:

<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()])"/>

我收到“非节点项”错误,但不明白为什么。任何帮助翻译此错误都非常感谢!

2 个答案:

答案 0 :(得分:3)

正如@LarsH所回答的那样,or运算符的优先级高于| union运算符,并且它会产生一个布尔表达式,您无法将其与节点集联合。

但是,除了你想要替换or联合的|运算符之外,我会使用这个表达式:

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

编辑:小错字......

答案 1 :(得分:1)

我认为您需要将or更改为|。您的意思是通过union(|)创建一个节点集,但or运算符返回一个布尔值,即“不是节点项”。