首页  >  问答  >  正文

javascript - 有没有将html转成json的方法呢?

最近接到一份工作,看似很普通,将文章用ajax读取然后浏览器滚动的时候动态加载文章,但是问题来了,文章源接口是以XML提供的,文章源与前端又不在一个域名下,这就涉及到XML跨域问题,但是文章源提供了可以用xslt的抓取系统,这样XML就可以转成html了,那么可以将html转成json然后跨域访问吗?或者xslt可以直接将xml转成json跨域访问吗?

高洛峰高洛峰2711 天前703

全部回复(6)我来回复

  • PHP中文网

    PHP中文网2017-05-19 10:44:37

    1. 让对方允许跨域访问

    2. 自己后端写个服务去抓去,然后前端从自己的服务器端读取显示

    回复
    0
  • ringa_lee

    ringa_lee2017-05-19 10:44:37

    node端有postHtml

    浏览器端不清楚可以github上搜搜

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:44:37

    构造函数并导出(可改为class)

    function XmlToJson() {}
    XmlToJson.prototype.setXml = function(xml) {
        if (xml && typeof xml == "string") {
            this.xml = document.createElement("p");
            this.xml.innerHTML = xml;
            this.xml = this.xml.getElementsByTagName("*")[0];
        } else if (typeof xml == "object") {
            this.xml = xml;
        }
    };
    XmlToJson.prototype.getXml = function() {
        return this.xml;
    };
    XmlToJson.prototype.parse = function(xml) {
        this.setXml(xml);
        return this.convert(this.xml);
    };
    XmlToJson.prototype.convert = function(xml) {
        if (xml.nodeType != 1) {
            return null;
        }
        var obj = {};
        obj.xtype = xml.nodeName.toLowerCase();
        var nodeValue = (xml.textContent || "").replace(/(\r|\n)/g, "").replace(/^\s+|\s+$/g, "");
    
        if (nodeValue && xml.childNodes.length == 1) {
            obj.text = nodeValue;
        }
        if (xml.attributes.length > 0) {
            for (var j = 0; j < xml.attributes.length; j++) {
                var attribute = xml.attributes.item(j);
                obj[attribute.nodeName] = attribute.nodeValue;
            }
        }
        if (xml.childNodes.length > 0) {
            var items = [];
            for (var i = 0; i < xml.childNodes.length; i++) {
                var node = xml.childNodes.item(i);
                var item = this.convert(node);
                if (item) {
                    items.push(item);
                }
            }
            if (items.length > 0) {
                obj.items = items;
            }
        }
        return obj;
    };
    export { XmlToJson };
    

    xml模板字符串

    let xml = `<viewport id="menuPane" layout="border">
        <panel region="center" border="0" layout="border">
            <tbar>
                <toolbar text="XXXX">
                    <menu>
                        <text text="11">
                        </text>
                        <text text="22">
                        </text>
                        <text text="33">
                        </text>
                    </menu>
                </toolbar>
                <toolbar text="XXXX">
                    <menu>
                        <text text="44">
                        </text>
                        <text text="55">
                        </text>
                        <menu>
                            <text text="6 6">
                            </text>
                        </menu>
                        <text text="77">
                        </text>
                    </menu>
                </toolbar>
            </tbar>
        </panel>
    </viewport>`;

    调用方法转xml为json并输出到console查看

    import { XmlToJson } from './xmlToJson.js';
    let xmlParser = new XmlToJson();
    let json = xmlParser.parse(xml);
    console.log(JSON.stringify(json));//输出xml转换后的json

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:44:37

    浏览器的 Ajax 跨域和 XML 还是 JSON格式 木有啥大关系。

    你需要的是Ajax跨域解决方案。

    回复
    0
  • 黄舟

    黄舟2017-05-19 10:44:37

    不知道是不是我的理解有问题,题主的要求不是跟爬虫很像吗?用爬虫爬回来,然后再解析到前台?不知道是不是我理解错了,或者用爬虫也能实现

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:44:37

    可以用iframe啊 网页中嵌套网页

    回复
    0
  • 取消回复