javascript xml怎么转json


本文摘自PHP中文网,作者藏色散人,侵删。

javascript xml转json的方法:首先通过“loadXml(str) {...}”加载xml数据;然后通过“xmlTojson(xmlObj, nodename,isarray){..}”将xml数据转成json对象的数据即可。

本文操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

1、代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

//加载xml数据

    function loadXml(str) {

        if (str == null) {

            return null;

        }

        var doc = str;

        try{

            doc = createXMLDOM();

            doc.async = false;

            doc.loadXML(str);

        }catch(e){

            doc = $.parseXML(str);

        }

        return doc;

    }

 

    //xml数据转成json对象的数据

    function xmlTojson(xmlObj, nodename, isarray){

        var obj = $(xmlObj);

        var itemobj = {};

        var nodenames = "";

        var getAllAttrs = function(node){//递归解析xml 转换成json对象

            var _itemobj = {};

            var notNull = false;

            var nodechilds = node.childNodes;

            var childlenght = nodechilds.length;

            var _attrs = node.attributes;

            var firstnodeName = "#text";

            try{

                firstnodeName = nodechilds[0].nodeName;

            }catch(e){

 

            }

            if((childlenght > 0 && firstnodeName != "#text") || _attrs.length > 0){

                var _childs = nodechilds;

                var _childslength = nodechilds.length;

                var _fileName_ = "";

                if(undefined != _attrs){

                    var _attrslength = _attrs.length;

                    for(var i = 0; i < _attrslength; i++){//解析xml节点属性

                        var attrname = _attrs[i].nodeName;

                        var attrvalue = _attrs[i].nodeValue;

                        _itemobj[attrname] = attrvalue;

                    }

                }

                for (var j = 0; j < _childslength; j++) {//解析xml子节点

                    var _node = _childs[j];

                    var _fildName = _node.nodeName;

                    if("#text" == _fildName){break;};

                    if(_itemobj[_fildName] != undefined){//如果有重复的节点需要转为数组格式

                        if(!(_itemobj[_fildName] instanceof Array)){

                            var a = _itemobj[_fildName];

                            _itemobj[_fildName] = [a];//如果该节点出现大于一个的情况 把第一个的值存放到数组中

                        }

                    }

                    var _fildValue = getAllAttrs(_node);

                    try{

                        _itemobj[_fildName].push(_fildValue);

                    }catch(e){

                        _itemobj[_fildName] = _fildValue;

                        _itemobj["length"] = 1;

                    }

                }

           }else{

                _itemobj = (node.textContent == undefined) ? node.text : node.textContent;

           }

           return _itemobj;

        };

 

        if(nodename){

            nodenames = nodename.split("/")

        }

        for(var i = 0;i < nodenames.length; i++){

            obj = obj.find(nodenames[i]);

        }

        $(obj).each(function(key, item){

            if(itemobj[item.nodeName] != undefined){

                if(!(itemobj[item.nodeName] instanceof Array)){

                    var a = itemobj[item.nodeName];

                    itemobj[item.nodeName] = [a];

                }

                itemobj[item.nodeName].push(getAllAttrs(item));

            }else{

                if(nodenames.length > 0){

                    itemobj[item.nodeName] = getAllAttrs(item);

                }else{

                    itemobj[item.firstChild.nodeName] = getAllAttrs(item.firstChild);

                }

            }

        });

 

        if(nodenames.length > 1){

            itemobj = itemobj[nodenames[nodenames.length-1]];

        }

        if(isarray && !(itemobj instanceof Array) && itemobj != undefined){

            itemobj = [itemobj];

        }

        return itemobj;

    }

     

    //实例测试

    var dataStr = '<userList><user name="aa" age="32"></user><user name="bb" age="33"></user><user name="cc" age="34"><child name="cc-1" age="3"></child></user></userList>'

    var xmlObj = loadXml(dataStr);

    var jsonData = xmlTojson(xmlObj, 'userList/user', true);

    console.log(jsonData)

2、测试结果

阅读剩余部分

相关阅读 >>

javascript中怎么将xml转为json

聊聊javascript人脸识别技术

浏览器的事件循环详解

javascript分不分整数浮点数

javascript怎么删除子节点

javascript中数组克隆的方法介绍(附代码)

举例说明js调用php和php调用js的方法

浅谈es6中的字符串(代码示例)

javascript定义变量的方法有哪些

javascript基础入门买什么书

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...