質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3494閲覧

Xpathで指定したテキストを含む箇所の属性値を指定する方法

raaacho

総合スコア28

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/12/24 06:49

以下のようなxmlの中から四半期報告書のURLを取得したいと考えています.
手動でXpath情報を抜き取るのではなく,このようなxmlの中から四半期報告書というワードが出てくるとそのURLを取得するような手法で取得したいです.
そのようなことを実現できるXpathの指定方法はありますか?
教えていただきたいです.

xml

1<feed xmlns="http://www.w3.org/2005/Atom"> 2<title>有報キャッチャー - EDINET情報配信サービス</title> 3<link href="http://resource.ufocatch.com/"/> 4<updated>2016-12-24T06:33:41Z</updated> 5<id> 6http://resource.ufocatch.com/atom/edinet/query/2193 7</id> 8<entry> 9<title> 10【E22663】クックパッド株式会社 四半期報告書-第20期第3四半期(平成28年7月1日-平成28年9月30日) 11</title> 12<link rel="alternate" type="application/pdf" href="http://resource.ufocatch.com/pdf/edinet/ED2016111000844"/> 13<id>ED2016111000844</id> 14<docid>S100912M</docid> 15<updated>2016-11-10T00:00:00+09:00</updated> 16・・・ 17・・・ 18・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

following-siblingを使えばできると思います。
以下は、四半期報告書が含まれるtitleの以降の最初のlinkのhrefを取得するという意味です。

/n:feed/n:title[contains(text(),"四半期報告書")]/following-sibling::n:link[1]/@href

※xmlnsが指定されているので、名前空間をnに設定した場合の例です。

以下に動作確認に使ったPHPコードを添付しておきます。(paize.ioでの実行)

php

1<?php 2$xml = '<feed xmlns="http://www.w3.org/2005/Atom"> 3<title>有報キャッチャー - EDINET情報配信サービス</title> 4<link href="http://resource.ufocatch.com/"/> 5<updated>2016-12-24T06:33:41Z</updated> 6<id> 7http://resource.ufocatch.com/atom/edinet/query/2193 8</id> 9<title> 10【E22663】クックパッド株式会社 四半期報告書-第20期第3四半期(平成28年7月1日-平成28年9月30日) 11</title> 12<link rel="alternate" type="application/pdf" href="http://resource.ufocatch.com/pdf/edinet/ED2016111000844"/> 13<id>ED2016111000844</id> 14<docid>S100912M</docid> 15<updated>2016-11-10T00:00:00+09:00</updated> 16</feed> 17'; 18 19$document = new DOMDocument(); 20$document->loadXML($xml); 21 22$xpath = new DOMXpath($document); 23$xpath->registerNamespace('n', "http://www.w3.org/2005/Atom"); 24$nodes = $xpath->query('/n:feed/n:title[contains(text(),"四半期報告書")]/following-sibling::n:link[1]/@href'); 25foreach ($nodes as $node) { 26 var_dump($node->nodeValue); 27}

投稿2016/12/24 08:34

編集2016/12/25 01:11
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/12/24 08:52

そういえば、<entry>というタグが閉じずに存在しておりパースエラーになったので消して検証しました...。
raaacho

2016/12/26 05:00

ご回答ありがとうございました!このXpathで無事,問題が解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問