さて、ここに私が探しているものがあります。
<a id>
DOM に入り、 「thread_title_」で始まるものを探したいと思います。ここに私が試したいくつかのことがあります:
// setup
def slurper = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser())
def gurl = new URL("url")
gurl.withReader { gReader ->
def try1 = gHTML.body.find { it['@id'].startsWith("thread_title_") }
// fails: Caught: groovy.lang.MissingMethodException: No signature of method: groovy.util.slurpersupport.Attributes.startsWith() is applicable for argument types: (java.lang.String) values: [thread_title_]
def try2 = gHTML.body.find { it['@id'] =~ /thread_title_/ }
// fails: Caught: groovy.lang.MissingMethodException: No signature of method: groovy.util.slurpersupport.Attributes.startsWith() is applicable for argument types: (java.lang.String) values: [thread_title_]
def try3 = gHTML.body.find { it['@id'].name.startsWith("thread_title_") }
// fails: Caught: groovy.lang.MissingMethodException: No signature of method: groovy.util.slurpersupport.NodeChildren.startsWith() is applicable for argument types: (java.lang.String) values: [thread_title_]
def try4 = gHTML.body.find { it['@id'] == 'thread_title_745429' }
// doesn't fail, but doesn't return anything either
def try5 = gHTML.body.findAll { it.name() == 'a' && it.@id.startsWith('thread_title_') }
try5.eachWithIndex { row, i ->
println "rn: $i"
}
// no output
}
属性の gdoc は次のとおりです。私は本当に「名前」が欲しいのではなく、「値」が欲しいのです。gpath ページは、それが機能することを意味しnode.character.find { it['@id'] == '2' }
ます。これは、find..startsWith によく似ているように思えます。このstackoverflowの回答は似ていますが、startsWithは異なり、全体にレンチを投げるようです。5 番目のエントリは、この stackoverflow answer に触発されました。
そして、心配なら入力データの問題です: $ curl --silent http://www.advrider.com/forums/forumdisplay.php?f=18 | grep スレッドのタイトル | トイレ -l 43
上記を使用したサンプル出力を次に示しcurl | grep
ます。
<a href="foo" id="thread_title_705760">text</a>
<a href="foo" id="thread_title_753701">text</a>
Groovy 1.7.10 がインストールされています。私は新しくなるかもしれませんが、それが役立つかどうかはわかりません。