我需要读取一个 xml 文件, 并打算修改其中的内容, 再将修改后的内容 http post 到一个服务上.
使用的是 xml-rs
fn generate_job_config_xml(git_remote_url: &str, job_config_xml_file_path: &str) -> Result<String, Box<dyn std::error::Error>> {
let job_config_xml_file: File = fs::File::open(job_config_xml_file_path).unwrap();
let job_config_xml_file: BufReader<File> = BufReader::new(job_config_xml_file);
let job_config_xml_parser: EventReader<BufReader<File>> = xml::reader::EventReader::new(job_config_xml_file);
/*
之后我不知道该怎么处理这个变量, 修改其中的某个 `XmlEvent` 的值,
然后将修改后的内容转成字符串
*/
for e in job_config_xml_parser {
// println!("XmlEvent 值为: {:?}", e.unwrap());
match e {
Ok(XmlEvent::Characters(t)) => {
match t {
"[email protected]:xx/xx.git".to_string() => {
// 修改 job_config_xml_parser 变量中这个地方的值为 [email protected]:yy/yy.git
}
}
}
// 其它的不管
}
}
Ok("sth".to_string())
}
我应该怎么处理这个情况? 麻烦给个提示.
现在我尝试使用其它的库, 比如 minidom, 不知道是否有自带的修改方法, 正在研究文档中.
初学 rust, 请勿见笑😅
1
krcalc 2022-01-29 11:08:20 +08:00 1
同新手,是我的话可能会用 quick-xml 和 serde
```rust // serde = { version = "1.0", features = [ "derive" ] } // quick-xml = { version = "0.22", features = [ "serialize" ] } use std::fs; use serde::{Serialize,Deserialize}; use quick_xml::de::from_str; use quick_xml::se::to_string; #[derive(Serialize,Deserialize)] #[serde(rename = "this_tag")] struct Thistag { k1: Option<String>, k2: Option<String>, child: String, atag: String } fn main() { //let s = fs::read_to_string("test.xml").unwrap(); let s = r#"<this_tag k1="v1" k2="v2"> <child> text </child> <atag>123123</atag> </this_tag>"#; let mut data: Thistag = from_str(&s).unwrap(); data.atag = String::from("abc"); let newxml =to_string(&data).unwrap(); println!("{}",newxml); } ``` |