我正在尝试从平面结构创建嵌套层次结构,我使用以下密钥:
<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()])"/>
我收到“非节点项”错误,但不明白为什么。任何帮助翻译此错误都非常感谢!
答案 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
运算符返回一个布尔值,即“不是节点项”。