私の理解では、パーサーをインスタンス化するときにベースURIが指定されている限り、jsoupパーサーは相対リンクを操作できます。
ここで、ドキュメントがページのURIとは異なるURIを持つベースタグを定義していると仮定します。このURIを事前に知ることはできません。
パーサーの動作は何ですか?タグを自動的に検出してドキュメント全体に適用しますか?または、最初にドキュメントを解析してベースタグを検出してから、検出された値をベースURIとして再解析する必要がありますか?
よろしくお願いしますKoj
私の理解では、パーサーをインスタンス化するときにベースURIが指定されている限り、jsoupパーサーは相対リンクを操作できます。
ここで、ドキュメントがページのURIとは異なるURIを持つベースタグを定義していると仮定します。このURIを事前に知ることはできません。
パーサーの動作は何ですか?タグを自動的に検出してドキュメント全体に適用しますか?または、最初にドキュメントを解析してベースタグを検出してから、検出された値をベースURIとして再解析する必要がありますか?
よろしくお願いしますKoj
Jsoup は<base>タグを検出し、ドキュメント全体に適用します。相対リンクを解決する場合、パーサーに提供された URI よりもベースタグ URI が優先されます。ドキュメントを 2 回解析する必要はありません。例として:
Document doc = Jsoup.parse(
"<a href='/one/'>One</a>" +
"<base href='http://example.com/' />" +
"<a href='/two/'>Two</a>");
Elements els = doc.select("a");
for (Element e: els) {
System.out.println(e.attr("abs:href"));
}
与えます:
http://example.com/one/
http://example.com/two/