Skip to main content

query_forge/output/formats/
xml.rs

1use 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}