added prefixes to SaxHandler
This commit is contained in:
parent
4cd9ecceb4
commit
628f7412aa
5 changed files with 23 additions and 21 deletions
|
|
@ -22,10 +22,6 @@ impl SaxHandler for PomReader{
|
|||
todo!()
|
||||
}
|
||||
|
||||
fn end_prefix_mapping(&mut self, prefix: &str, uri: &str) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn start_element(&mut self, uri: Option<String>, local_name: &str, qualified_name: &str, attributes: Vec<Attribute>) {
|
||||
todo!()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,12 +10,10 @@ impl SaxHandler for DebugHandler {
|
|||
fn end_document(&mut self) {
|
||||
debug!("end_document");
|
||||
}
|
||||
fn start_prefix_mapping(&mut self, _prefix: &str, _uri: &str) {
|
||||
debug!("start_prefix_mapping");
|
||||
}
|
||||
fn end_prefix_mapping(&mut self, _prefix: &str, _uri: &str) {
|
||||
debug!("end_prefix_mapping");
|
||||
fn start_prefix_mapping(&mut self, prefix: &str, _uri: &str) {
|
||||
debug!("start_prefix_mapping for {}", prefix);
|
||||
}
|
||||
|
||||
fn start_element(
|
||||
&mut self,
|
||||
_uri: Option<String>,
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ pub trait SaxHandler {
|
|||
fn start_document(&mut self);
|
||||
fn end_document(&mut self);
|
||||
fn start_prefix_mapping(&mut self, prefix: &str, uri: &str);
|
||||
fn end_prefix_mapping(&mut self, prefix: &str, uri: &str);
|
||||
fn start_element(
|
||||
&mut self,
|
||||
uri: Option<String>,
|
||||
|
|
|
|||
|
|
@ -123,7 +123,8 @@ impl<'a> SAXParser<'a> {
|
|||
if self.current == '/' {
|
||||
self.advance()?;
|
||||
let namespace = self.pop_namespace();
|
||||
self.handler.end_element(namespace, lname.as_str(), qualified_name);
|
||||
self.handler
|
||||
.end_element(namespace, lname.as_str(), qualified_name);
|
||||
}
|
||||
self.expect_char('>')?;
|
||||
self.skip_whitespace()?;
|
||||
|
|
@ -139,7 +140,10 @@ impl<'a> SAXParser<'a> {
|
|||
|
||||
if att_name.starts_with("xmlns:") {
|
||||
let prefix = att_name[6..].to_string();
|
||||
self.prefix_mapping.insert(prefix, att_value.to_string());
|
||||
self.prefix_mapping
|
||||
.insert(prefix.clone(), att_value.to_string());
|
||||
self.handler
|
||||
.start_prefix_mapping(&prefix, &att_value);
|
||||
}
|
||||
|
||||
let namespace = if att_name == "xmlns" {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
use std::collections::HashMap;
|
||||
use undeepend::xml::sax_parser::parse_string;
|
||||
use undeepend::xml::{Attribute, SaxError, SaxHandler};
|
||||
|
||||
|
|
@ -120,10 +121,16 @@ fn test_namespace_prefixes() {
|
|||
testhandler.elements[2],
|
||||
r#"<http://example.com/books:page>"#
|
||||
);
|
||||
assert_eq!(testhandler.elements[3], r#"<http://example.com/covers:cover>"#);
|
||||
assert_eq!(
|
||||
testhandler.elements[3],
|
||||
r#"<http://example.com/covers:cover>"#
|
||||
);
|
||||
assert_eq!(testhandler.elements[4], r#"<publisher>"#);
|
||||
assert_eq!(testhandler.end_element_called, 5);
|
||||
assert_eq!(testhandler.end_document_called, 1);
|
||||
assert_eq!(testhandler.mappings.len(), 2);
|
||||
assert_eq!(testhandler.mappings["books"], "http://example.com/books");
|
||||
assert_eq!(testhandler.mappings["covers"], "http://example.com/covers");
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -133,6 +140,7 @@ struct TestHandler {
|
|||
start_element_called: usize,
|
||||
end_element_called: usize,
|
||||
elements: Vec<String>,
|
||||
mappings: HashMap<String, String>,
|
||||
}
|
||||
|
||||
impl TestHandler {
|
||||
|
|
@ -143,6 +151,7 @@ impl TestHandler {
|
|||
start_element_called: 0,
|
||||
end_element_called: 0,
|
||||
elements: vec![],
|
||||
mappings: HashMap::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -156,12 +165,8 @@ impl SaxHandler for TestHandler {
|
|||
self.end_document_called += 1;
|
||||
}
|
||||
|
||||
fn start_prefix_mapping(&mut self, _prefix: &str, _uri: &str) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn end_prefix_mapping(&mut self, _prefix: &str, _uri: &str) {
|
||||
todo!()
|
||||
fn start_prefix_mapping(&mut self, prefix: &str, uri: &str) {
|
||||
self.mappings.insert(prefix.to_string(), uri.to_string());
|
||||
}
|
||||
|
||||
fn start_element(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue