- ベストアンサー
xPathで全てのhタグを取得したいのですが
Python2.6とlxml.htmlにて、 例えばh2タグ内を全て取得したいのですが、上手くいきません。 <h2>タグが3つあるとして、 自分は、//h:h2や、//*[name()='h2']などと指定し、text()を行いましたが上手くいきませんでした。 最初の方は、未定義の名前空間プレフィックス、2つめは最初のh2タグの内容しか取れませんでした。 色々試したのですが、ちょっと方法が思い付きません。 アドバイスいただけないでしょうか? 宜しくお願い致します。 カテゴリをXMLとその他のプログラミングで迷いました。 もしこちらではないようでしたら移動いたします。
- valilian
- お礼率37% (44/118)
- XML
- 回答数1
- ありがとう数20
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
よくわからんけど、こういうこと? import lxml.html root = lxml.html.fromstring(r'''<html> <body> <h2>hello world</h2> <h2>foo <em>bar</em> baz</h2> </body> </html>''') res = root.xpath('//h2') print res[1].text # foo print res[1].text_content() # foo bar baz print res[1][0].text # bar print res[1][0].tail # baz 名前空間うんぬんの件はよく意味がわからない。 HTMLを処理しようとしてるんじゃないの?
関連するQ&A
- 複数タグ指定してHTMLを取得したい
VBAでMSHTML.HTMLDocumentを使用してWEB上から指定したタグ内のテキストを取得しようとしているのですが、取得したいデータがタグが複数に分かれています。 divの特定クラス内だけなど取得したいのですが、データ1は<h1>データ2は<td>や<p>など、getElementsByTagName(tag)だと、一つしかタグを指定きず、個別に取得するとデータ1とデータ2の関連がバラバラになってしまう為、複数タグを指定して取得できる方法を探しています。 イメージとしてはgetElementsByTagName(tag).Lengthが10の時にh1のタグを発見してそこからh1のinnerTextとtdタグ2つ分のinnerText取得して、またh1タグを発見するまでループして取得するような形に出来ればと思っています。 自作する以外ないのでしょうか?
- ベストアンサー
- HTML
- ブログですが xmlとcssでh1タグ
お世話になります。 ブログユーザーなんですが 本体のxmlとデザインのcssのファイルがあり cssのファイルの中にh1タグがあるのですが 関連する本体のxmlのファイルの中にh1タグが 見当たりません ? でもcssのh1タグで指定するとその指定が ブログタイトルに反映されます h1タグとblogtitleは初めから 関連づいているものなのでしょうか? よろしくお願いします
- ベストアンサー
- XML
- jQueryでxmlの異なるタグ要素を取得したい。
jQueryを最近勉強したての者です。 詳しい方、どうか教えて下さい。 HTMLにxmlのデータを読み込ませようとしています。 概略をお話しすると、 htmlファイルによって、xmlの別々の要素を取得したいのです。 やりたいメソッドは同じです。 別々の要素の中のデータによって、imgの表示/非表示を切り替えたいのです。 問題は、対象となるhtmlファイルが複数あり そのhtmlファイルによって、参照するxmlのタグが異なる事なんです。 xmlは、以下のように<shopdata>をルートノードとし、以下のような感じです。 --------------------- <?xml version="1.0" encoding="utf-8"?> <shopdata> <item> <name1>0</name1> <name2>1</name2> <name3>0</name3> </item> </shopdata> --------------------- <name*>~</name*> の中のデータは、0もしくは1なのですが 0の時はimgを表示 1の時はimgを非表示させようと考えています。 ただ<name1><name2><name3> とタグ名がバラバラなんです。 ※おしりの数字が違うだけで、規則的ではあります。 ちなみにhtmlは複数あって a.htmlの時は→xmlの<name1>を参照 b.htmlの時は→xmlの<name2>を参照 c.htmlの時は→xmlの<name3>を参照 という感じです。 ※htmlファイル名は特に規則的ではなく、いろいろなファイル名がついています。。。 最初、考えたのは、 htmlのどこかに、id="1"と入れて、idが1の時は、<name1>の要素を取得し、 htmlのどこかに、id="2"と入れて、idが2の時は、<name2>の要素を取得し… っていうことを考えたのですが、それもどのように書いたら良いのかが分からないんです。 そもそも、そういった事は可能なのでしょうか? ちなみのhtmlのbodyタグ自体がテンプレートでできているので、 idをどこかにふるとしたら、head内とかになるのしょうか? それぞれ、ボタンの表示は、 if文を使って、show(),hide()メソッドを使うとは思うのですが… 詳しくコードを教えていただけたら、助かります。 どうか、宜しくお願いいたします。
- ベストアンサー
- AJAX
- XML::XPathでのタグの取り出し
perl勉強し始めの初心者ですが、よろしくお願いします。 自分なりに調べたつもりですが分からなかったので質問させていただきます。 perlでXMLをHTMLとTEXTに変換したくてParser、Simple、DOMなどを試し、最終的にXPathにたどり着きました。 でも、XPathでの同じタグの取出しができません。 -------------------------------------------- <root> <man> <name>あああ</name> <id>11111</id> <tel>111-1111</tel> </man> <man> <name>いいい</name> <id>2222</id> <tel>222-2222</tel> </man> <man> <name>ううう</name> <id>3333</id> <tel>333-3333</tel> </man> </root> -------------------------------------------- このような場合の<name>の「あああ」だけを取り出したいのですが、 "root/man/name" だと、<name>の中身が全部出てきてしまいます。 "root/man/name[1]" でもだめでした。 どなたか分かる方いらっしゃいましたら、教えてください。 よろしくお願いします。
- ベストアンサー
- Perl
- Formタグ内にあるテキストボックスのname取得
HTMLページ内に、Formタグがいくつかあって、その中にテキストボックスが一つずつ配置されています。 ページをロードしたときに、そのテキストボックスのnameを取得してそのnameに基づいた処理をしたいと思っています。 Fromタグはページ内にいくつあるか決まっていません。 nameも取得しないとどういうnameがあるか分からない状態です。 name取得が出来るのかが分からないのですが、ここ数日ずっとネットで検索していたのですが見つからず、取得方法がご存じの方、教えて頂けませんでしょうか。 よろしくお願いいたします。
- ベストアンサー
- AJAX
- JQueryでxmlのデータを取得する。
以下のようになっているxmlのデータがあります。 --------------------- <item> <name1>0</name1> <name2>1</name2> <name3>0</name3> </item> --------------------- <item>~</item>の中の 子ノードのタグ名とテキストデータをJQueryを使って取得したいと考えています。 上記のように、<name1><name2><name3> とタグ名がバラバラなので 配列で取得したいのですが。やり方がわかりません。 どなたかご教授ください。
- ベストアンサー
- AJAX
- XML::XPathを使う
エラーがでて期待する出力が出ず困っています。 ファイル名とXPathのコマンドライン引数をとり、 指定されたパスに一致するノードを出力するものです。 (参考書の写しなので、記述ミスはないと思います。) ■grabber.pl use XML::XPath; use XML::XPath::XMLParser; my $xpath = XML::XPath->new( filename => shift @ARGV ); my $nodeset = $xpath->find( shift @ARGV ); foreach my $node ( nodeset->get_nodelist ) { print XML::XPath::XMLParser::as_string( $node ) . "\n"; } コマンドラインに入力しているものは、 perl grabber.pl data.xml "/inventory/category/item/name" ■data.xml <?xml version="1.0"?> <inventory date="2001"> <category> <item id="2"> <name>aaaa</name> </item> </category> </inventory> です。 perl grabber.pl data.xml "/inventory/category/item/name" としても、下記にエラーが出ます。 Can't locate object method "get_nodelist" via package "nodeset" (perhaps you for got to load "nodeset"?) at grabber.pl line 5. いろいろ試してみたり調べたのですが、 行き詰ってしまいました。 期待する出力は"<name>aaaa</name>"なのですが・・・ どなたかこのエラーの原因がおわかりになるかた いらっしゃいますでしょうか。 環境は以下になります。 ・windowsxp ・activePerl モジュールのインストール済み ・XML-XPath ・XML-Parser 以上です。
- ベストアンサー
- Perl
- XSLTにてタグ名を取得する方法
XML勉強中です。実は、XML文書に決められたタグがあって、その中身を探してXSL変換、というのは覚えたのですが、ふと迷ってしまいました。 たとえば、トップレベルにあるタグの名前が不明な場合、エレメントの一覧を取得するにはどうしたら良いのでしょうか? 自分でXMLを記述しておいてそれはないだろと言われそうなのですが、HTMLのための資源としてではなく、データとしての利用を考えたときにふと悩んでしまいました。 <person> <name> <ID> etc... </person> <company> <name> <adress> <tel>etc... </company> このとき、personとcompanyを取得したいのですが・・・。 template match="/" にて value-of select="name(.)" とか一通り試したのですが、出てくれませんでした。 まだはっきりとXSLTの書き方を習得していないので、とてつもなくアホな質問かもしれませんが、よろしくお願いいたします。
- ベストアンサー
- XML
- jQuery text()で、<br>タグも取得し
jQuery text()で、<br>と<br />タグも取得したいのですが、どうすれば良いでしょうか? $("p.hoge").html();で取得すると、それ以外のタグも取得されてしまいます。 欲しいのは、「テキスト+<br>+<br />」です あるいは、html()で指定範囲を全て取得して、そこから、「<br>と<br />」以外の全てのhtmlタグを削除、 というのは、出来るでしょうか?
- ベストアンサー
- JavaScript
- hタグの右横に画像を表示
hタグ(今回は<h3>タグ)の右横に、「new」の画像を表示したいと思っています。 <h3>タグは1ページの中に複数出てきて、それぞれ文字数も異なります。 全てに「new」がつく訳ではなく、任意のものだけに表示です。 css の background image で試してみたのですが 当然のことながら、left か right かの指定なので、どちらかに極端に寄ってしまいます。 right 指定で%で指定していけば、なんとなくバランスよくはできますが あくまでなんとなくであって、 更にタイトルの文字数によって変わってきてしまうので 個別にcssを指定していかなければなりません。 (そういうものなのでしょうか。) ※例えば「new」画像が左置きなら、 background image を使って、hタグの css に padding-left:100px; などとすれば済みますよね(画像の分だけpaddingで空きを作る)。 でも右側に画像を置くとなると、こんなにも面倒なものなのでしょうか。 hタグのタイトルから右横に(例えば)20px空きをつくり画像を配置、 ということが簡単には出来ないものでしょうか。 それとも <h3>テキストテキストテキスト<img src="********"></h3> なんてことをしてもいいものでしょうか。 宜しくお願いします。
- ベストアンサー
- CSS