2016-03-21 10 views
1

以下のXpathの式が意味するものを説明してもらえますか?私は//node()理解//node()[not(text())] Xpath表現の解釈

//node()[not(*)][not(normalize-space())][not(boolean(@Key))]

  • //node()[not(*)][not(normalize-space())]
    1. は任意のノードが、次の式でわからないことを意味します。

  • 答えて

    4
    //node()[not(*)][not(normalize-space())] 
    

    子要素ノードを持っているし、その文字列の値のいずれかではありませんどこにも文書のすべての要素、テキスト、コメント、および処理命令ノード、空白または空白から完全になる

    //node()[not(*)][not(normalize-space())][not(boolean(@Key))] 
    

    上記のように、@Key属性がないという特別な条件があります。最後の述語はひどく書かれています:その意味を変えずに[not(@Key)]に短縮することができます。

    //node()[not(text())] 
    

    子テキストノードを持たないすべての要素、テキスト、コメント、および処理命令ノード(文書内の任意の場所)。

    +0

    OKはるかに正確で正確です。 –

    0

    は(@Michaelケイコメントのおかげで)
    第1の更新:
    //node()子を持っていない(テキスト、コメントおよび処理命令ではなく、属性を含む)、ドキュメント内のすべてのノード
    [not(*)]要素ノード
    [not(normalize-space())]テキストコンテンツ(空白の横)はありません。

    第二1:最初のものと同じですが、追加 :

    [not(boolean(@Key))]ノードが属性キー アップデートがありません:三一つは を、これはまた、任意でノードを無視しますあなたの例ではe.g. this に見ていますテキストコンテンツ(でも空白)

    +0

    と3番目はどうですか? – yonan2236

    +1

    完全に正確な答えではありません。たとえば、 '// node()'はドキュメント内のすべてのノードを選択するわけではなく、ドキュメントノードを選択せず​​、属性と名前空間を選択しません。 '[not(*)]'は子テキストノードを許可しますが、子要素ノードは許可しません。 –