improve parser in reqprops to take into account not found props

This commit is contained in:
grimhilt 2023-07-13 16:19:33 +02:00
parent b4cb78c676
commit 60e0bf76a0

View File

@ -164,42 +164,30 @@ impl ReqProps {
} }
fn parse(&self, xml: String, multiple: bool) -> Vec<ObjProps> { fn parse(&self, xml: String, multiple: bool) -> Vec<ObjProps> {
dbg!(xml.clone());
let cursor = Cursor::new(xml); let cursor = Cursor::new(xml);
let parser = EventReader::new(cursor); let parser = EventReader::new(cursor);
let mut should_get = false;
let mut values: Vec<ObjProps> = vec![]; let mut values: Vec<ObjProps> = vec![];
let mut iter = self.xml_balises.iter(); let mut should_get = false;
let mut val = iter.next(); let mut val: String = String::from("");
let mut content = ObjProps::new(); let mut content = ObjProps::new();
for event in parser { for event in parser {
match event { match event {
Ok(XmlEvent::StartElement { name, .. }) => { Ok(XmlEvent::StartElement { name, .. }) => {
dbg!(name.clone().local_name); should_get = {
if let Some(v) = val.clone() { if self.xml_balises.clone().contains(&name.local_name) {
should_get = &name.local_name == v; val = name.local_name.clone();
true
} else { } else {
// end of balises to get then start over for false
// next object if want multiple
values.push(content.clone());
if multiple {
iter = self.xml_balises.iter();
val = iter.next();
content = ObjProps::new();
if let Some(v) = val.clone() {
should_get = &name.local_name == v;
}
} else {
break;
}
} }
};
} }
Ok(XmlEvent::Characters(text)) => { Ok(XmlEvent::Characters(text)) => {
if !text.trim().is_empty() && should_get { if !text.trim().is_empty() && should_get {
match val.unwrap().as_str() { match val.as_str() {
"href" => { "href" => {
content.href = Some(text.clone()); content.href = Some(text.clone());
content.relative_s = Some( content.relative_s = Some(
@ -217,11 +205,18 @@ impl ReqProps {
}, },
_ => (), _ => (),
} }
val = iter.next() should_get = false;
} }
} }
Ok(XmlEvent::EndElement { name, .. }) => { Ok(XmlEvent::EndElement { name, .. }) => {
dbg!(name.clone().local_name); if name.local_name == "response" {
values.push(content.clone());
if multiple {
content = ObjProps::new();
} else {
break;
}
}
should_get = false; should_get = false;
} }
Err(e) => { Err(e) => {