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
|
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))]
|
#[instrument(skip(self))]
|
||||||
pub fn next_characters(&mut self) -> String {
|
pub fn next_characters(&mut self) -> String {
|
||||||
loop {
|
loop {
|
||||||
|
@ -126,6 +147,7 @@ impl CVRF {
|
||||||
"DocumentType" => self.documenttype = xmlreader.next_characters(),
|
"DocumentType" => self.documenttype = xmlreader.next_characters(),
|
||||||
"DocumentPublisher" => self.documentpublisher.load_from_xmlreader(xmlreader),
|
"DocumentPublisher" => self.documentpublisher.load_from_xmlreader(xmlreader),
|
||||||
"DocumentTracking" => self.documenttracking.load_from_xmlreader(xmlreader),
|
"DocumentTracking" => self.documenttracking.load_from_xmlreader(xmlreader),
|
||||||
|
"DocumentNotes" => self.handle_notes(xmlreader),
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -138,6 +160,18 @@ impl CVRF {
|
||||||
|
|
||||||
Ok(())
|
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
|
// depth = 2
|
||||||
|
@ -165,25 +199,10 @@ impl Publisher {
|
||||||
#[instrument(skip(self, xmlreader))]
|
#[instrument(skip(self, xmlreader))]
|
||||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||||
loop {
|
loop {
|
||||||
let key = match xmlreader.next() {
|
let key = if let Some(key) = xmlreader.next_start_name_under_depth(1) {
|
||||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
key
|
||||||
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;
|
|
||||||
} else {
|
} else {
|
||||||
String::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
error!("XmlReader Error: {e}");
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
_ => String::new(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
match key.as_str() {
|
match key.as_str() {
|
||||||
|
@ -256,28 +275,10 @@ impl DocumentTracking {
|
||||||
#[instrument(skip(self, xmlreader))]
|
#[instrument(skip(self, xmlreader))]
|
||||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||||
loop {
|
loop {
|
||||||
let key = match xmlreader.next() {
|
let key = if let Some(key) = xmlreader.next_start_name_under_depth(1) {
|
||||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
key
|
||||||
debug!("Find StartElement named: {}", name.local_name);
|
|
||||||
if xmlreader.depth != 3 {
|
|
||||||
continue;
|
|
||||||
} else {
|
} else {
|
||||||
name.local_name.clone()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(XmlEvent::EndElement { .. }) => {
|
|
||||||
// DocumentTracking 读取完毕
|
|
||||||
if xmlreader.depth < 2 {
|
|
||||||
trace!("DocumentTracking read to end.");
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
String::new()
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
error!("XmlReader Error: {e}");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_ => String::new(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
match key.as_str() {
|
match key.as_str() {
|
||||||
|
@ -360,25 +361,10 @@ impl Revision {
|
||||||
#[instrument(skip(self, xmlreader))]
|
#[instrument(skip(self, xmlreader))]
|
||||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||||
loop {
|
loop {
|
||||||
let key = match xmlreader.next() {
|
let key = if let Some(key) = xmlreader.next_start_name_under_depth(3) {
|
||||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
key
|
||||||
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;
|
|
||||||
} else {
|
} else {
|
||||||
String::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
error!("XmlReader Error: {e}");
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
_ => String::new(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
match key.as_str() {
|
match key.as_str() {
|
||||||
|
@ -416,25 +402,10 @@ impl Generator {
|
||||||
#[instrument(skip(self, xmlreader))]
|
#[instrument(skip(self, xmlreader))]
|
||||||
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||||
loop {
|
loop {
|
||||||
let key = match xmlreader.next() {
|
let key = if let Some(key) = xmlreader.next_start_name_under_depth(1) {
|
||||||
Ok(XmlEvent::StartElement { name, .. }) => {
|
key
|
||||||
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;
|
|
||||||
} else {
|
} else {
|
||||||
String::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
error!("XmlReader Error: {e}");
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
_ => String::new(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
match key.as_str() {
|
match key.as_str() {
|
||||||
|
@ -473,6 +444,10 @@ impl Note {
|
||||||
content: String::new(),
|
content: String::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn load_from_xmlreader(&mut self, xmlreader: &mut XmlReader) {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// depth = 3
|
// depth = 3
|
||||||
|
|
Loading…
Reference in New Issue
Block a user