スポンサーリンク
fn main() {
let source:&str = r#"<!DOCTYPE html> <html lang="ja"> <head> <title> HTML in the code </title> </head> <body> <div id="mymain"> <p> first line </p> <p> second <br/> line </p> <p> third line </p> <img src="data.jpg" /> </div> <div id="myfooter"> <p>copyright</p> </div> </body> </html "#;
////////////////////////// // HTMLの解析 let myparse:scraper::Html = scraper::Html::parse_document(&source); let selector:scraper::Selector = scraper::Selector::parse("*").unwrap(); let parsed:scraper::ElementRef = myparse.select(&selector).next().unwrap(); println!("*************************"); traverse_element(&parsed,1); }
/// @brief 解析済みのHTMLを再帰的に走査して内容を表示 /// @param [in] elementref 解析済みのエレメント /// @param [in] depth 再帰の階層 /// @return なし fn traverse_element(elementref: &scraper::ElementRef, depth: usize) { let indent:String = " ".repeat(depth*3);// 階層に合わせて左側に挿入するスペース let element:&scraper::node::Element = elementref.value(); let tag_name:&str = element.name(); print!("{}",depth); // 階層の表示 print!("{} {}",indent,tag_name); // タグ名表示 // 属性取得・保存 for attr in element.attrs(){ let attr_name =&attr.0.to_string(); let attr_value =&attr.1.to_string(); print!(" {} = {}", &attr_name, &attr_value ); } println!(""); // 子要素を再帰的に辿る for child in elementref.children() { if let Some(child_element) = child.value().as_element() { // タグの場合 // 子要素を走査 let c_elem_ref:scraper::ElementRef = scraper::ElementRef::wrap(child).unwrap(); traverse_element(&c_elem_ref, depth + 1); } else if let Some(text) = child.value().as_text() { // コンテンツの場合 let contents:&str = text.trim(); if !contents.is_empty() { print!("{}",depth); // コンテンツを表示 println!("[[[[[[[[[[[[[[[[[[{}]]]]]]]]]]]]]]]]]]]]]", contents); } } } }
1 html lang = ja
2 head
3 title
3[[[[[[[[[[[[[[[[[[HTML in the code]]]]]]]]]]]]]]]]]]]]]
2 body
3 div id = mymain
4 p
4[[[[[[[[[[[[[[[[[[first line]]]]]]]]]]]]]]]]]]]]]
4 p
4[[[[[[[[[[[[[[[[[[second]]]]]]]]]]]]]]]]]]]]]
5 br
4[[[[[[[[[[[[[[[[[[line]]]]]]]]]]]]]]]]]]]]]
4 p
4[[[[[[[[[[[[[[[[[[third
line]]]]]]]]]]]]]]]]]]]]]
4 img src = data.jpg
3 div id = myfooter
4 p
4[[[[[[[[[[[[[[[[[[copyright]]]]]]]]]]]]]]]]]]]]]