anchor.diff:                nodeData = '';
               }
               obj[nodeName] = nodeData;
  +          } else if (obj[nodeName] is Map) {
  +            var jsonCopy = json.decode(json.encode(obj[nodeName]));
  +            obj[nodeName] = <dynamic>[jsonCopy, <dynamic, dynamic>{}];
  +            obj = obj[nodeName].last;
  +          } else if (obj[nodeName] is List) {
  +            obj[nodeName].add(<dynamic, dynamic>{});
  +            obj = obj[nodeName].last;
             } else {
               obj[nodeName] = <dynamic, dynamic>{};
               obj = obj[nodeName];
  +          }
  +          if (node.attributes.isNotEmpty) {
  +            _parseAttrs(node, obj);
             }
           } else {
             /* No children, empty element */
  
positive.code:       } else {
          if (node.children.isNotEmpty) {
            if (node.children[0] is XmlText) {
              final sanitisedNodeData =
                  _Xml2JsonUtils.escapeTextForJson(node.children[0].text);
              var nodeData = '"$sanitisedNodeData"';
              if (nodeData.isEmpty) {
                nodeData = '';
              }
  
              var attrs = node.attributes;
              // 如果开始节点里有属性
              if (attrs.isNotEmpty) {
                var objTemp = <dynamic, dynamic>{};
                attrs.forEach((attr) {
                  objTemp['"_${attr.name.local}"'] = '"${attr.value}"';
                });
                objTemp['"value"'] = nodeData;
                if (obj[nodeName] is Map) {
                  var jsonCopy = json.decode(json.encode(obj[nodeName]));
                  obj[nodeName] = <dynamic>[jsonCopy, objTemp];
                } else if (obj[nodeName] is List) {
                  obj[nodeName].add(objTemp);
                } else {
                  obj[nodeName] = objTemp;
                }
              } else {
                if (obj[nodeName] is String) {
                  obj[nodeName] = <dynamic>[obj[nodeName], nodeData];
                } else if (obj[nodeName] is List) {
                  obj[nodeName].add(nodeData);
                } else {
                  obj[nodeName] = nodeData;
                }
              }
            } else if (node.children[0] is XmlCDATA) {
              final sanitisedNodeData =
                  _Xml2JsonUtils.escapeTextForJson(node.children[0].text);
  
negative.code:     return obj;
    }
  
    /// 解析节点里的属性值
    void _parseAttrs(dynamic node, dynamic obj) {
      node.attributes.forEach((attr) {
        obj!['"_${attr.name.local}"'] = '"${attr.value}"';
      });
    }
  
    /// 解析XmlText节点
    void _parseXmlTextNode(dynamic node, dynamic obj, dynamic nodeName) {
      final sanitisedNodeData =
          _Xml2JsonUtils.escapeTextForJson(node.children[0].text);
      var nodeData = '"$sanitisedNodeData"';
      // print('nodeData----------->$nodeData');
      if (nodeData.isEmpty) {
        nodeData = '';
      }
      var attrs = node.attributes;
      // 如果开始节点里有属性
      if (attrs.isNotEmpty) {
        var objTemp = <dynamic, dynamic>{};
        _parseAttrs(node, objTemp);
        objTemp['"value"'] = nodeData;
        if (obj[nodeName] is Map) {
          var jsonCopy = json.decode(json.encode(obj[nodeName]));
          obj[nodeName] = <dynamic>[jsonCopy, objTemp];
        } else if (obj[nodeName] is List) {
          obj[nodeName].add(objTemp);
        } else {
          obj[nodeName] = objTemp;
        }
      } else {
        if (obj[nodeName] is String) {
          obj[nodeName] = <dynamic>[obj[nodeName], nodeData];
        } else if (obj[nodeName] is List) {
          obj[nodeName].add(nodeData);
        } else {
          obj[nodeName] = nodeData;
        }
      }
    }
  
    /// Transformer function
    String transform(XmlDocument? xmlNode) {
      Map<dynamic, dynamic>? json;
  