CVRF::load_xml: init

Signed-off-by: Jia Chao <jiac13@chinaunicom.cn>
This commit is contained in:
Jia Chao 2024-06-03 14:29:27 +08:00
parent e0b67fe1b0
commit 4ea66d9f93

View File

@ -4,9 +4,10 @@
)] )]
use std::collections::HashMap; use std::collections::HashMap;
use std::fs::File; use std::fs::File;
use std::io::BufReader; use std::io::{self, BufReader};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tracing::{debug, error, instrument, trace};
use xml::reader::{EventReader, Events, XmlEvent}; use xml::reader::{EventReader, Events, XmlEvent};
struct XmlReader { struct XmlReader {
@ -84,6 +85,37 @@ impl CVRF {
vulnerability: Vulnerability::new(), vulnerability: Vulnerability::new(),
} }
} }
#[instrument(skip(self))]
pub fn load_xml(&mut self, xmlfile: &str) -> io::Result<()> {
let file = File::open(xmlfile)?;
let mut xmlreader = XmlReader::new(file);
loop {
let event = xmlreader.next();
if xmlreader.depth != 2 {
if event == Ok(XmlEvent::EndDocument) {
trace!("End of the xml, break...");
break;
}
continue;
}
// 这里只处理深度为 2 的子 xml 块
match event {
Ok(XmlEvent::StartElement { ref name, .. }) => match name.local_name.as_str() {
_ => {}
},
Err(e) => {
error!("XmlReader error: {e}");
break;
}
_ => {}
}
}
Ok(())
}
} }
// depth = 2 // depth = 2