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