[js] js 将字符串xml 转成 json对象

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <meta http-equiv="Content-Language" content="zh-CN" />
  <meta name="Keywords" content="" />
  <meta name="Description" content="" />
  <script src="jQuery.js" type="text/javascript"></script>

<script>
  //解析xml字符串变量为IXMLDOMDocument2 
function parseXML(data) {
    var xml, tmp;
    if (window.DOMParser) { // Standard 
        tmp = new DOMParser();
        xml = tmp.parseFromString(data, "text/xml");
    } else { // IE 
        xml = new ActiveXObject("Microsoft.XMLDOM");
        xml.async = "false";
        xml.loadXML(data);
    }
    tmp = xml.documentElement;
    if (!tmp || !tmp.nodeName || tmp.nodeName === "parsererror") {
        return null;
    }
    return xml;
}

//将 IXMLDOMDocument2 转换为JSON,参数为IXMLDOMDocument2对象  
function toJson(obj) {
    if (this == null) return null;
    var retObj = new Object;
    buildObjectNode(retObj,
    /*jQuery*/
    obj);
    return retObj;
    function buildObjectNode(cycleOBJ,
    /*Element*/
    elNode) {
        /*NamedNodeMap*/
        var nodeAttr = elNode.attributes;
        if (nodeAttr != null) {
            if (nodeAttr.length && cycleOBJ == null) cycleOBJ = new Object;
            for (var i = 0; i < nodeAttr.length; i++) {
                cycleOBJ[nodeAttr[i].name] = nodeAttr[i].value;
            }
        }
        var nodeText = "text";
        if (elNode.text == null) nodeText = "textContent";
        /*NodeList*/
        var nodeChilds = elNode.childNodes;
        if (nodeChilds != null) {
            if (nodeChilds.length && cycleOBJ == null) cycleOBJ = new Object;
            for (var i = 0; i < nodeChilds.length; i++) {
                if (nodeChilds[i].tagName != null) {
                    if (nodeChilds[i].childNodes[0] != null && nodeChilds[i].childNodes.length <= 1 && (nodeChilds[i].childNodes[0].nodeType == 3 || nodeChilds[i].childNodes[0].nodeType == 4)) {
                        if (cycleOBJ[nodeChilds[i].tagName] == null) {
                            cycleOBJ[nodeChilds[i].tagName] = nodeChilds[i][nodeText];
                        } else {
                            if (typeof(cycleOBJ[nodeChilds[i].tagName]) == "object" && cycleOBJ[nodeChilds[i].tagName].length) {
                                cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length] = nodeChilds[i][nodeText];
                            } else {
                                cycleOBJ[nodeChilds[i].tagName] = [cycleOBJ[nodeChilds[i].tagName]];
                                cycleOBJ[nodeChilds[i].tagName][1] = nodeChilds[i][nodeText];
                            }
                        }
                    } else {
                        if (nodeChilds[i].childNodes.length) {
                            if (cycleOBJ[nodeChilds[i].tagName] == null) {
                                cycleOBJ[nodeChilds[i].tagName] = new Object;
                                buildObjectNode(cycleOBJ[nodeChilds[i].tagName], nodeChilds[i]);
                            } else {
                                if (cycleOBJ[nodeChilds[i].tagName].length) {
                                    cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length] = new Object;
                                    buildObjectNode(cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length - 1], nodeChilds[i]);
                                } else {
                                    cycleOBJ[nodeChilds[i].tagName] = [cycleOBJ[nodeChilds[i].tagName]];
                                    cycleOBJ[nodeChilds[i].tagName][1] = new Object;
                                    buildObjectNode(cycleOBJ[nodeChilds[i].tagName][1], nodeChilds[i]);
                                }
                            }
                        } else {
                            cycleOBJ[nodeChilds[i].tagName] = nodeChilds[i][nodeText];
                        }
                    }
                }
            }
        }
    }
}
</script>
</head>
<body style="background:#000;">
    <textarea style="width:950px;height: 500px;">
      <site>
    <id>abc7b4ab46494f0bba6e8e4709c7eaa0</id>
    <name>SDK_101简易模板</name>
    <author name="[提示:请添加模板作者名称]" url="http://www.yourwebsite.com" wangwang="[提示:请添加模板作者的旺旺]"></author>
    <thumbnail>assets/images/default-thumbnail.png</thumbnail>
    <language>PHP</language>
    <version>1.0.0</version>
    <apply-sites>2</apply-sites>
    <apply-user>c测试账号154</apply-user>
    <template-type>1</template-type>
    <sale-type>1</sale-type>
    <change-notes>[提示:请添加模板修改日志]</change-notes>
    <description>SDK_101简易模板</description>
    <global>
        <header>header.json</header>
        <footer>footer.json</footer>
    </global>
    <themes default="第一风格">
        <theme name="第二风格">
            <css>assets/stylesheets/style2/extra.css</css>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
        </theme>
        <theme name="第一风格">
            <css>assets/stylesheets/style1/extra.css</css>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
        </theme>
        <theme name="第三风格">
            <css>assets/stylesheets/style3/extra.css</css>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
        </theme>
        <theme name="第四风格">
            <css>assets/stylesheets/style4/extra.css</css>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
        </theme>
    </themes>
    <pages>
        <page type="index">
            <name>首页</name>
            <file>index.json</file>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
            <description xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">[提示:请添加首页的描述]</description>
        </page>
        <page type="detail">
            <name>默认宝贝详情页</name>
            <file>detail.json</file>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
            <description xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">[提示:请添加默认宝贝详情页的描述]</description>
        </page>
        <page type="list">
            <name>默认宝贝分类页</name>
            <file>list.json</file>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
            <description xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">[提示:请添加默认宝贝分类页的描述]</description>
        </page>
        <page type="other">
            <name>自定义页面</name>
            <file>other.json</file>
            <thumbnail>assets/images/default-thumbnail.png</thumbnail>
            <description xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">[提示:请添加自定义页面的描述]</description>
        </page>
    </pages>
</site>
    </textarea>
    <script>
    var xml=$('textarea').val();
    var j=toJson(parseXML(xml));
    alert(     JSON.stringify(j)   );
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值