请教一个读取修改 xml 文件的问题

2022-01-19 22:54:53 +08:00
 plko345

我需要读取一个 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 {
                	"git@gitlab.com:xx/xx.git".to_string() => {
                    	// 修改 job_config_xml_parser 变量中这个地方的值为 git@gitlab.com:yy/yy.git
                    }
                }
            }
            // 其它的不管
        }
    }
    Ok("sth".to_string())
}

我应该怎么处理这个情况? 麻烦给个提示.

现在我尝试使用其它的库, 比如 minidom, 不知道是否有自带的修改方法, 正在研究文档中.

初学 rust, 请勿见笑😅

1518 次点击
所在节点    Rust
1 条回复
krcalc
2022-01-29 11:08:20 +08:00
同新手,是我的话可能会用 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);
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829343

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX