xml_parser_util.dart 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // ignore_for_file: implementation_imports
  2. import "package:xml/xml.dart";
  3. // used for classes that can be converted to xml
  4. abstract class XmlParsableObject {
  5. Map<String, dynamic> toMap();
  6. String get elementName;
  7. }
  8. // for converting the response to xml
  9. String convertJs2Xml(Map<String, dynamic> json) {
  10. final builder = XmlBuilder();
  11. buildXml(builder, json);
  12. return builder.buildDocument().toXmlString(
  13. pretty: true,
  14. indent: ' ',
  15. );
  16. }
  17. // for building the xml node tree recursively
  18. void buildXml(XmlBuilder builder, dynamic node) {
  19. if (node is Map<String, dynamic>) {
  20. node.forEach((key, value) {
  21. builder.element(key, nest: () => buildXml(builder, value));
  22. });
  23. } else if (node is List<dynamic>) {
  24. for (var item in node) {
  25. buildXml(builder, item);
  26. }
  27. } else if (node is XmlParsableObject) {
  28. builder.element(
  29. node.elementName,
  30. nest: () {
  31. buildXml(builder, node.toMap());
  32. },
  33. );
  34. } else {
  35. builder.text(node is String ? node : node.toString());
  36. }
  37. }