Maison  >  Questions et réponses  >  le corps du texte

javascript - Existe-t-il un moyen de convertir du HTML en JSON?

J'ai récemment reçu un travail qui semblait très ordinaire. J'ai utilisé ajax pour lire l'article, puis j'ai chargé dynamiquement l'article lorsque le navigateur défilait. Mais voici le problème : l'interface source de l'article est fournie en XML, et la source de l'article et. le front-end n'est pas le même. Sous le nom de domaine, cela implique des problèmes inter-domaines XML, mais la source de l'article fournit un système d'exploration qui peut utiliser xslt, afin que XML puisse être converti en HTML. Le HTML peut-il être converti en JSON. puis accessible à travers les domaines ? Ou xslt peut-il convertir directement XML en JSON pour un accès inter-domaines ?

高洛峰高洛峰2711 Il y a quelques jours702

répondre à tous(6)je répondrai

  • PHP中文网

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

    1. Demandez à l'autre partie d'autoriser l'accès entre domaines

    2. Écrivez un service sur votre propre backend pour le capturer, puis le frontend le lit et l'affiche depuis votre propre serveur

    répondre
    0
  • ringa_lee

    ringa_lee2017-05-19 10:44:37

    Il y a postHtml côté nœud

    Si vous ne connaissez pas le côté navigateur, vous pouvez le rechercher sur github

    répondre
    0
  • 滿天的星座

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

    Constructeur et export (peut être modifié en classe)

    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 };
    

    chaîne de modèle 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>`;

    Appelez la méthode pour convertir XML en JSON et envoyez-la sur la console pour la visualisation

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

    répondre
    0
  • 给我你的怀抱

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

    Le navigateur Ajax cross-domain n'a rien à voir avec le format XML ou JSON.

    Ce dont vous avez besoin, c'est d'une solution multidomaine Ajax.

    répondre
    0
  • 黄舟

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

    Je ne sais pas s'il y a quelque chose qui ne va pas dans ma compréhension. Les exigences du questionneur ne sont-elles pas similaires à celles d'un robot ? Utiliser un robot pour revenir en arrière, puis l'analyser à la réception ? Je ne sais pas si je comprends mal, ou si cela peut aussi être réalisé à l'aide d'un robot

    répondre
    0
  • 给我你的怀抱

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

    Vous pouvez utiliser iframe pour intégrer des pages Web dans des pages Web

    répondre
    0
  • Annulerrépondre