# parsercher [![Crate](https://img.shields.io/crates/v/parsercher.svg)](https://crates.io/crates/parsercher) [![API](https://img.shields.io/badge/api-3.1.6-green.svg)](https://docs.rs/parsercher) **Parses and searches Tag documents. (e.g. HTML, XML)** parsercher parses documents written in tags such as HTML and XML. - Create a Dom structure tree from the tag document. - Search for tags and text from the Dom structure tree. - Search subtrees from the Dom structure tree. ## Usage Add this to your `Cargo.toml`: ``` [dependencies] parsercher = "3.1.6" ``` ## License [MIT](./LICENSE-MIT) OR [Apache-2.0](./LICENSE-APACHE) ## Examples **Example of getting text from HTML.** Create a tree of Dom structure from HTML and get the text of `li` tag that value of `class` attribute is `target`. ```rust use parsercher; use parsercher::dom::Tag; let html = r#" sample html
  1. first
  2. second
  3. therd
"#; if let Ok(root_dom) = parsercher::parse(&html) { let mut needle = Tag::new("li"); needle.set_attr("class", "target"); if let Some(texts) = parsercher::search_text_from_tag_children(&root_dom, &needle) { assert_eq!(texts.len(), 2); assert_eq!(texts[0], "first".to_string()); assert_eq!(texts[1], "therd".to_string()); } } ``` **Example of searching a subtree from the Dom structure tree.** Find a subtree that has a `ul` tag whose value in the `class` attribute is `targetList` and two `li` tags under it. Also, the values of the `class` attribute of the `li` tag must be `key1` and` key2`, respectively. Looking for: ```text ``` ```rust use parsercher; let doc = r#"
"#; let root_dom = parsercher::parse(&doc).unwrap(); let needle = r#" "#; let result = root_dom.search(&needle).unwrap().unwrap(); for dom in result.iter() { parsercher::print_dom_tree(&dom); } ``` output: ```text