Hướng dẫn xml to string nodejs - xml thành chuỗi nodejs

0

New! Save questions or answers and organize your favorite content. Learn more.
Learn more.

I have XML documents shown below


    
    
        
              
                %
              
               
                

              
        
    

Here I want to convert this XML to

var parseString = require('xml2js').parseString;
var xml = "YOUR XML";
parseString(xml, function (err, result) {
    console.dir(result);
});
1

Hướng dẫn xml to string nodejs - xml thành chuỗi nodejs

abdulbarik

5,8674 gold badges35 silver badges57 bronze badges4 gold badges35 silver badges57 bronze badges

asked Sep 20, 2016 at 6:52Sep 20, 2016 at 6:52

1

You can use the xml2js module to easily convert the XML to a JavaScript object and then do what you want with it.

Example:

var parseString = require('xml2js').parseString;
var xml = "YOUR XML";
parseString(xml, function (err, result) {
    console.dir(result);
});

Do you have that XML in the string? In a file? As a response to a web request? If it's not in a string then you will have to load it first.

answered Sep 20, 2016 at 7:49Sep 20, 2016 at 7:49

rsprsprsp

103k28 gold badges197 silver badges174 bronze badges28 gold badges197 silver badges174 bronze badges

Tôi đang tìm kiếm một thư viện JavaScript phân tích chuỗi XML và chuyển đổi nó thành một đối tượng JavaScript. Những cái tốt là những cái như thế nào?

hỏi ngày 17 tháng 11 năm 2010 lúc 2:20Nov 17, 2010 at 2:20Nov 17, 2010 at 2:20

Drew Lesueurdrew LesueurDrew LeSueurDrew LeSueur

18.3K28 Huy hiệu vàng87 Huy hiệu bạc102 Huy hiệu đồng28 gold badges87 silver badges102 bronze badges28 gold badges87 silver badges102 bronze badges

Chức năng sau đây phân tích XML và trả về một đối tượng JavaScript với sơ đồ tương ứng với XML. Anh chị em XML w/ cùng tên được thu gọn thành các mảng. Các nút có tên có thể được tìm thấy trong tham số

var parseString = require('xml2js').parseString;
var xml = "YOUR XML";
parseString(xml, function (err, result) {
    console.dir(result);
});
2 (mảng chuỗi tên thẻ) luôn mang lại mảng ngay cả trong trường hợp chỉ có một lần xuất hiện thẻ.
var parseString = require('xml2js').parseString;
var xml = "YOUR XML";
parseString(xml, function (err, result) {
    console.dir(result);
});
2 có thể được bỏ qua. Các nút văn bản chỉ có không gian bị loại bỏ.

function parseXml(xml, arrayTags) {
    let dom = null;
    if (window.DOMParser) dom = (new DOMParser()).parseFromString(xml, "text/xml");
    else if (window.ActiveXObject) {
        dom = new ActiveXObject('Microsoft.XMLDOM');
        dom.async = false;
        if (!dom.loadXML(xml)) throw dom.parseError.reason + " " + dom.parseError.srcText;
    }
    else throw new Error("cannot parse xml string!");

    function parseNode(xmlNode, result) {
        if (xmlNode.nodeName == "#text") {
            let v = xmlNode.nodeValue;
            if (v.trim()) result['#text'] = v;
            return;
        }

        let jsonNode = {},
            existing = result[xmlNode.nodeName];
        if (existing) {
            if (!Array.isArray(existing)) result[xmlNode.nodeName] = [existing, jsonNode];
            else result[xmlNode.nodeName].push(jsonNode);
        }
        else {
            if (arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1) result[xmlNode.nodeName] = [jsonNode];
            else result[xmlNode.nodeName] = jsonNode;
        }

        if (xmlNode.attributes) for (let attribute of xmlNode.attributes) jsonNode[attribute.nodeName] = attribute.nodeValue;

        for (let node of xmlNode.childNodes) parseNode(node, jsonNode);
    }

    let result = {};
    for (let node of dom.childNodes) parseNode(node, result);

    return result;
}

Đã trả lời ngày 18 tháng 10 năm 2013 lúc 11:35Oct 18, 2013 at 11:35Oct 18, 2013 at 11:35

6

Đã trả lời ngày 17 tháng 11 năm 2010 lúc 3:16Nov 17, 2010 at 3:16Nov 17, 2010 at 3:16

icyrock.comicyrock.comicyrock.comicyrock.com

Phù vàng 27.4K4 Huy hiệu vàng64 Huy hiệu bạc83 Huy hiệu đồng4 gold badges64 silver badges83 bronze badges4 gold badges64 silver badges83 bronze badges

1

Đi thẳng vào điểm (sử dụng Node-xml2json):using node-xml2json):using node-xml2json):

npm install xml2json

Sau đó, sử dụng nó:

const parser = require('xml2json');

const obj = parser.toJson(xml, { object: true });

Example:

const parser = require('xml2json');

const xml = 'Bob Dylan';

const obj = parser.toJson(xml, { object: true });
const { person } = obj.root;
person.name; // Bob Dylan

Bạn cũng có thể chuyển đổi từ JSON sang XML và nhiều hơn nữa.

Đã trả lời ngày 26 tháng 8 năm 2020 lúc 13:28Aug 26, 2020 at 13:28Aug 26, 2020 at 13:28

Diogodiogodiogodiogo

3.3891 Huy hiệu vàng22 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge22 silver badges30 bronze badges1 gold badge22 silver badges30 bronze badges

Tôi muốn một phiên bản TypeScript đơn giản không tạo các đối tượng #Text bổ sung và cũng không quan tâm đến các thuộc tính. Nếu đó là những gì bạn cần, đây là mã:

export class DomFuncs {

    static parseNode = (node: Node) => {    
        const childNodes = node.childNodes;
        if (childNodes.length === 0) {
            return node.nodeValue;
        } else if (childNodes.length === 1 && childNodes[0].nodeType === Node.TEXT_NODE) {
            return childNodes[0].nodeValue;
        } else {
            const obj = {};
            childNodes.forEach(childNode => {
                const childName = childNode.nodeName;
                const childValue = obj[childName];
                if (childValue !== undefined) {
                    if (Array.isArray(childValue)) {
                        childValue.push(DomFuncs.parseNode(childNode));
                    } else {
                        obj[childName] = [childValue, DomFuncs.parseNode(childNode)];
                    }
                } else {
                    obj[childName] = DomFuncs.parseNode(childNode);
                }
            });
            return obj;
        }
    };

    static xml2obj = (str: string) => {
        const dom = (new DOMParser()).parseFromString(str, 'text/xml')
        const result = {[dom.nodeName]: DomFuncs.parseNode(dom)};
        return result;
    }
}

Để dùng nó:

DomFuncs.xml2obj(xmlString);

Kịch bản này hiện đang coi thường các thuộc tính XML vì đối tượng được chuyển đổi của tôi không yêu cầu chúng. Nếu bạn cần điều đó, hãy cho tôi biết và tôi có thể cập nhật mã.

Đã trả lời ngày 23 tháng 2 năm 2021 lúc 17:13Feb 23, 2021 at 17:13Feb 23, 2021 at 17:13

Tệp JavaScript XML2JSON từ https://bitbucket.org/surenrao/xml2json là tất cả những gì bạn cần để làm điều này.

Dưới đây là liên kết tải xuống để tải xuống nhanh: https://bitbucket.org/surenrao/xml2json/get/0e0989dfe48e.zip

Sau khi được bao gồm trong dự án của bạn, đây là một số mã mẫu để bạn bắt đầu:

var xmlStr = "Bob Dylan";
var jsObj = X2J.parseXml(xmlStr);
var result = jsObj[0].root[0].person[0].name[0].jValue; //Bob Dylan

Đã trả lời ngày 15 tháng 2 năm 2013 lúc 17:07Feb 15, 2013 at 17:07Feb 15, 2013 at 17:07

Tom Gtom gTom GTom G

3.6151 Huy hiệu vàng20 Huy hiệu bạc19 Huy hiệu đồng1 gold badge20 silver badges19 bronze badges1 gold badge20 silver badges19 bronze badges