Jsoup ライブラリをプロジェクトに使用しようと思い、調査を始めました。Google で検索してみましたが、役に立つ正確な答えは見つかりませんでした。問題は、以下のようなメタタグが付いた HTML ファイルがあることです。
<meta content="this is the title value" name="d.title">
<meta content="this is the description value" name="d.description">
<meta content="language is french" name="d.language">
そしてJava Pojoは次のようになります
public class Example {
private String title;
private String description;
private String language;
public Example() {}
// setters and getters go here
}
ここで、HTML ファイルを解析し、d.title のコンテンツ値を抽出して Example.title に保存し、d.description の「content」の値を抽出して Example.description に保存するなどしたいと思います。
私がjsoupクックブックを読んでやったことは、次のようなことです。
Document doc = Jsoup.parse("test.html");
Elements metaTags = doc.getElementsByTag("meta");
for (Element metaTag : metaTags) {
String content = metaTag.attr("content");
String content = metaTag.attr("name");
}
これは、すべてのメタタグを調べて、その「content」属性と「name」属性の値を取得しますが、私が望んでいるのは、「name」属性が「d.title」である「content」属性の値を取得して、それをExample.titleに保存することです。
アップデート:@PJMeischの回答は実際に問題を解決していますが、私の好みにはコードが多すぎます(まったく同じことを避けようとしていました)。つまり、次のようなことが可能かもしれないと考えていました。
文字列タイトル = metaTags.getContent("d.title")
ここで、d.title は「name」属性の値です。こうすることで、コード行数が減ります。私はそのような方法を見つけていませんが、それは私がまだ jsoup に慣れていないからかもしれません。だから質問したのです。しかし、そのような方法が存在しない場合は (あれば便利です。そうすれば作業が楽になります)、PJMeisch の言うとおりにします。
ベストアンサー1
全てのコードは次の通りです:
Document doc = Jsoup.parse("test.html");
Elements metaTags = doc.getElementsByTag("meta");
Example ex = new Example();
for (Element metaTag : metaTags) {
String content = metaTag.attr("content");
String name = metaTag.attr("name");
if("d.title".equals(name)) {
ex.setTitle(content);
}
if("d.description".equals(name)) {
ex.setDescription(content);
}
if("d.language".equals(name)) {
ex.setLanguage(content);
}
}