XmlReader: 添加函数 next_start_name_under_depth
Signed-off-by: Jia Chao <jiac13@chinaunicom.cn>
This commit is contained in:
parent
8de62fe07d
commit
c2d3b27c06
117
src/lib.rs
117
src/lib.rs
|
@ -46,6 +46,27 @@ impl XmlReader {
|
|||
event
|
||||
}
|
||||
|
||||
pub fn next_start_name_under_depth(&mut self, depth: usize) -> Option<String> {
|
||||
match self.next() {
|
||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
||||
debug!("Find StartElement named: {}", name.local_name);
|
||||
Some(name.local_name.clone())
|
||||
}
|
||||
Ok(XmlEvent::EndElement { .. }) => {
|
||||
if self.depth > depth {
|
||||
Some(String::new())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("XmlReader Error: {e}");
|
||||
None
|
||||
}
|
||||
_ => Some(String::new()),
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(skip(self))]
|
||||
pub fn next_characters(&mut self) -> String {
|
||||
loop {
|
||||
|
@ -126,6 +147,7 @@ impl CVRF {
|
|||
"DocumentType" => self.documenttype = xmlreader.next_characters(),
|
||||
"DocumentPublisher" => self.documentpublisher.load_from_xmlreader(xmlreader),
|
||||
"DocumentTracking" => self.documenttracking.load_from_xmlreader(xmlreader),
|
||||
"DocumentNotes" => self.handle_notes(xmlreader),
|
||||
_ => {}
|
||||
},
|
||||
Err(e) => {
|
||||
|
@ -138,6 +160,18 @@ impl CVRF {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_notes(&mut self, xmlreader: &mut XmlReader) {
|
||||
loop {
|
||||
let mut note = Note::new();
|
||||
note.load_from_xmlreader(xmlreader);
|
||||
|
||||
if xmlreader.depth < 2 {
|
||||
break;
|
||||
}
|
||||
self.documentnotes.push(note)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// depth = 2
|
||||
|
@ -165,25 +199,10 @@ impl Publisher {
|
|||
#[instrument(skip(self, xmlreader))]
|
||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||
loop {
|
||||
let key = match xmlreader.next() {
|
||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
||||
debug!("Find StartElement named: {}", name.local_name);
|
||||
name.local_name.clone()
|
||||
}
|
||||
Ok(XmlEvent::EndElement { .. }) => {
|
||||
// DocumentPublisher 读取完毕
|
||||
if xmlreader.depth < 2 {
|
||||
trace!("DocumentPublisher read to end.");
|
||||
break;
|
||||
let key = if let Some(key) = xmlreader.next_start_name_under_depth(1) {
|
||||
key
|
||||
} else {
|
||||
String::new()
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("XmlReader Error: {e}");
|
||||
break;
|
||||
}
|
||||
_ => String::new(),
|
||||
};
|
||||
|
||||
match key.as_str() {
|
||||
|
@ -256,28 +275,10 @@ impl DocumentTracking {
|
|||
#[instrument(skip(self, xmlreader))]
|
||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||
loop {
|
||||
let key = match xmlreader.next() {
|
||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
||||
debug!("Find StartElement named: {}", name.local_name);
|
||||
if xmlreader.depth != 3 {
|
||||
continue;
|
||||
let key = if let Some(key) = xmlreader.next_start_name_under_depth(1) {
|
||||
key
|
||||
} else {
|
||||
name.local_name.clone()
|
||||
}
|
||||
}
|
||||
Ok(XmlEvent::EndElement { .. }) => {
|
||||
// DocumentTracking 读取完毕
|
||||
if xmlreader.depth < 2 {
|
||||
trace!("DocumentTracking read to end.");
|
||||
break;
|
||||
}
|
||||
String::new()
|
||||
}
|
||||
Err(e) => {
|
||||
error!("XmlReader Error: {e}");
|
||||
break;
|
||||
}
|
||||
_ => String::new(),
|
||||
};
|
||||
|
||||
match key.as_str() {
|
||||
|
@ -360,25 +361,10 @@ impl Revision {
|
|||
#[instrument(skip(self, xmlreader))]
|
||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||
loop {
|
||||
let key = match xmlreader.next() {
|
||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
||||
debug!("Find StartElement named: {}", name.local_name);
|
||||
name.local_name.clone()
|
||||
}
|
||||
Ok(XmlEvent::EndElement { .. }) => {
|
||||
// Revision 读取完毕
|
||||
if xmlreader.depth < 4 {
|
||||
trace!("Revision read to end.");
|
||||
break;
|
||||
let key = if let Some(key) = xmlreader.next_start_name_under_depth(3) {
|
||||
key
|
||||
} else {
|
||||
String::new()
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("XmlReader Error: {e}");
|
||||
break;
|
||||
}
|
||||
_ => String::new(),
|
||||
};
|
||||
|
||||
match key.as_str() {
|
||||
|
@ -416,25 +402,10 @@ impl Generator {
|
|||
#[instrument(skip(self, xmlreader))]
|
||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||
loop {
|
||||
let key = match xmlreader.next() {
|
||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
||||
debug!("Find StartElement named: {}", name.local_name);
|
||||
name.local_name.clone()
|
||||
}
|
||||
Ok(XmlEvent::EndElement { .. }) => {
|
||||
// DocumentPublisher 读取完毕
|
||||
if xmlreader.depth < 2 {
|
||||
trace!("DocumentPublisher read to end.");
|
||||
break;
|
||||
let key = if let Some(key) = xmlreader.next_start_name_under_depth(1) {
|
||||
key
|
||||
} else {
|
||||
String::new()
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("XmlReader Error: {e}");
|
||||
break;
|
||||
}
|
||||
_ => String::new(),
|
||||
};
|
||||
|
||||
match key.as_str() {
|
||||
|
@ -473,6 +444,10 @@ impl Note {
|
|||
content: String::new(),
|
||||
}
|
||||
}
|
||||
|
||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
||||
// depth = 3
|
||||
|
|
Loading…
Reference in New Issue
Block a user