2017-12-19 11 views
2

なぜ私のXPathは混在コンテンツで動作しませんか?下記のHTMLで

<html> 
     <div class="row content-box"> 
     <div class="col-xs-12 col-sm-6"> 
     <div class="gray-separator-3"> 
     <div class="row to-top"> 
      <h2 class="xs-mt-0"> 
      Who's covered? 
      <span class="ns-i-pencil_icon icon-flipped pensil-font"></span> 
      <span> 
       <a class="edit-font firefinder-match" href="#">Edit</a> 
      </span> 
     </h2> 
     <p class="xs-mt-0 xs-mb-0">David</p> 
     </div> 
     </div> 
     </div> 
    </html> 

として書かれたときに '編集' リンクためのXPathはが動作していないよう:

//div[.//h2[contains(.,'Who's covered?')]]//span/a[.='Edit']

が、書かれたときに期待通りに動作するようです次のように:

//div[.//h2]//span/a[.='Edit'] 

012の下に子ノードがない場合は正常に動作します以下の場合のように

、私はこのようなXPathを書くとき:

//div[.//h2[contains(.,'What's covered?')]]//span/a[.='Edit']はそれが要素を識別します。

<html> 
    <div class="row content-box"> 
    <div class="col-xs-12 col-sm-6"> 
    <div class="gray-separator-3"> 
    <div class="row to-top"> 
     <h2 class="xs-mt-0"> 
     What's covered? 
     </h2> 
     <span> 
     <a class="edit-font firefinder-match" href="#">Edit</a> 
     </span> 
     <p class="xs-mt-0 xs-mb-0">David</p> 
    </div> 
    </div> 
    </div> 
</html> 

テキストと共にその下の子ノードを持つことが<h2>を読まない理由はありますか?

ノードにテキストとサブツリーの両方があり、XPathを書くときにサブツリーだけがテキストであるノードがある場合、違いは何ですか?

答えて

3

これは、混在していないコンテンツとは何の関係もありません。

最初のXPathが不正です。

//div[.//h2[contains(.,"Who's covered?")]]//span/a[.='Edit'] 

//div[.//h2[contains(.,'Who's covered?')]]//span/a[.='Edit'] 

からそれを変更し、あなたが期待するとして、それは動作します。

XPathをホストしている言語がすでにXPathの自分自身を囲むように"を使用している場合、あなたは(Java用)などのように、内側"を脱出することができるように注意してください:

"//div[.//h2[contains(.,\"Who's covered?\")]]//span/a[.='Edit']" 

と正常に動作します

の子ノードがない場合

いいえ、その不正な形式のXPathは正常に動作しません。

+0

しかし、ほとんどの場合は機能します。ロジックについて議論するのではなく、ここでは一重引用符で動作する例を示します。しかし、これはどのように私はすべての時間のすべてのオブジェクトIDを書いている。 http://i66.tinypic.com/2ryod3s.jpg –

+1

申し訳ありませんが、誤った形式のXPathが「うまくいく」と誰かに納得させるには、完全な** [mcve] **を提供する必要があります。 XPathパーサの観点から見てみましょう: '' Who'の後に '' 'が出現すると、' contains() 'の最初の引数として構築されている文字列を閉じます。あなたは 's'に遭遇し、「ああ、ここにいるはずがない」と言う。 – kjhughes

+1

一重引用符の中に一重引用符があるときに完全な意味がありました。ありがとうございました。 これは、一重引用符を二重に変更したときに機能しました。 –

関連する問題