query_forge/output/formats/
xml.rs1use crate::{QueryResult, QueryValue};
2use crate::value::display_value;
3
4use super::utils::{escape_xml_tag, escape_xml_text};
5
6pub fn render_xml(result: &QueryResult) -> String {
7 let mut output = String::from("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<data>\n");
8
9 for row in &result.rows {
10 output.push_str(" <row>\n");
11 for (column_index, column) in result.columns.iter().enumerate() {
12 let value = row.get(column_index).unwrap_or(&QueryValue::Null);
13 let xml_column = escape_xml_tag(column);
14 let xml_value = escape_xml_text(&display_value(value));
15 output.push_str(&format!(
16 " <{}>{}</{}>\n",
17 xml_column, xml_value, xml_column
18 ));
19 }
20 output.push_str(" </row>\n");
21 }
22
23 output.push_str("</data>");
24 output
25}