2011-01-13 5 views
0

私はフラットな構造から、ネストされた階層を作成しようとしている、と私は、次のキーを使用しています:XSLTエラー「ではないノード項目」

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

私は「ないノード項目」を取得していますエラーは、なぜ、理解していない。このエラーを翻訳する上での助けがあれば、大歓迎です!

答えて

3

@LarsHが答えたとおり、or演算子の優先順位は|であり、ノードセットに結合できないブール式になります。

しかし、あなたは |組合のため orオペレータを交換したいように見えることを、私はこの表現使用するほか:

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

編集:小さなタイプミス...

+0

明確な説明と優れた例をありがとう。非常に役立ちます。 – Jacqueline

+0

良い説明とサンプルコードのために+1 – Jacqueline

+0

+1エラーを解決するために、そしてなぜ彼女が "or"を使用していたかを知るために、より良い解決策が得られました。 – LarsH

1

or|に変更する必要があると思います。ユニオン(|)を介してノードセットを作成することを意味しましたが、or演算子はブール値を返します。これは「ノード項目ではありません」です。

+0

ましたトリック - ありがとう! – Jacqueline

+0

+1正解 –

+0

@ジャクリーン:@ LarsHの正解以外にも、より良い表現を確認してください。 –

関連する問題