2

DOM構造がわからないWebページがあります...しかし、その特定のWebページで見つける必要があるテキストは知っています..だから、そのxpathを取得するために私がすることは次のとおりです:

doc = Nokogiri::HTML(webpage)
doc.traverse { |node|
  if node.text?
    if node.content == "my text"
      path << node.path
    end
  end
}
puts path

ここで、:: のような出力が得られるとします。

   html/body/div[4]/div[8]/div/div[38]/div/p/text()

後でこのウェブページに再びアクセスしたときに、これを行うことができます::

    doc.xpath("#{path[0]}")

テキストが必要なたびにDOMツリー全体をトラバースする代わりに

上記の xpath 出力のどの要素ノードに関連付けられた属性があり、それらの属性値が何であるかを知る必要があるため、さらに処理を行いたいと考えています。どうすればそれを達成できますか?私が望む出力は

    #=> output desired
{ p => p_attr_value , div => div_attr_value , div[38] => div[38]_attr_value.....so on }

「私のテキスト」が存在するノードを検索する際の問題に直面していません..「私のテキスト」ノードの完全なxpathが欲しかった..トラバーサル全体を行った理由...完全なxpathを見つけた後、私は「my text」ノードにたどり着くときに遭遇した各要素ノードに関連付けられた属性が必要です

制約は::Webブラウザで利用可能な開発者ツールを使用できません

PS :: ruby​​ と nokogiri の初心者です。

4

1 に答える 1

1

XPath 式を使用して選択された要素のすべての属性を選択するsomeExprには、新しい XPath 式を評価する必要があります。

someExpr/@*

wheresomeExprは、特定の要素を選択するために使用される実際の XPath 式に置き換える必要があります。

これにより、Xpath 式によって選択されたすべての (1 つだけであると仮定します) 要素のすべての属性が選択されます。someExpr

たとえば、必要な要素が次の方法で選択されている場合:

/a/b/c 

次に、そのすべての属性が次の方法で選択されます。

/a/b/c/@*
于 2012-07-23T13:22:34.463 に答える