mapToXml static method

XmlElement mapToXml(
  1. String tag,
  2. dynamic data
)

Implementation

static XmlElement mapToXml(String tag, dynamic data) {
  final element = XmlElement(XmlName(tag));
  if (data is! Map<String, dynamic>) {
    element.innerText = data.toString();
    return element;
  }

  Map<String, String> attributes = {};
  List<XmlNode> children = [];

  for (final entry in data.entries) {
    final String key = entry.key;
    final dynamic value = entry.value;
    if (key.startsWith('@')) {
      final attrName = key.substring(1);
      attributes[attrName] = value.toString();
    } else if (value is Map<String, dynamic>) {
      children.add(mapToXml(key, value));
    } else if (value is List) {
      for (final item in value) {
        children.add(mapToXml(key, item));
      }
    } else {
      final child = XmlElement(XmlName(key));
      child.innerText = value.toString();
      children.add(child);
    }
  }

  element.attributes.addAll(
    attributes.entries.map((e) => XmlAttribute(XmlName(e.key), e.value)),
  );
  element.children.addAll(children);

  return element;
}