programing

Javascript를 사용하여 XML을 JSON(및 이전 버전)으로 변환

newsource 2023. 2. 7. 20:00

Javascript를 사용하여 XML을 JSON(및 이전 버전)으로 변환

XML에서 JSON으로 변환한 후 다시 XML로 변환하려면 어떻게 해야 합니까?

다음 도구는 잘 작동하지만 완전히 일관되지는 않습니다.

이 상황을 경험한 사람이 있습니까?

이것이 가장 좋은 방법이라고 생각합니다.XML과 JSON을 생각합니다.

xml.com O'Reilly 사이트에서 동봉된 기사를 꼭 읽어보시기 바랍니다.이 기사에는 이러한 전환에 관한 문제에 대한 자세한 내용이 기재되어 있습니다.이러한 내용은 귀하를 계몽하는 데 도움이 될 것입니다.Or'Reilly가 기사를 주최하고 있다는 사실은 Stefan의 솔루션이 가치가 있다는 것을 나타낼 것입니다.

https://github.com/abdmob/x2js - 만의 라이브러리(http://code.google.com/p/x2js/)에서 URL 참조:

XML에서 JSON(JavaScript Objects)으로, 그 반대로 javascript 변환 함수를 제공합니다.라이브러리는 매우 작기 때문에 다른 추가 라이브러리는 필요하지 않습니다.

API 함수

  • new X2JS() - 모든 라이브러리 기능에 액세스할 인스턴스를 만듭니다.또한 옵션 구성 옵션을 지정할 수도 있습니다.
  • X2JS.xml2json - DOM 개체로 지정된 XML을 JSON으로 변환합니다.
  • X2JS.json2xml - JSON을 XML DOM 개체로 변환
  • X2JS.xml_str2json - 문자열로 지정된 XML을 JSON으로 변환합니다.
  • X2JS.json2xml_str - JSON을 XML 문자열로 변환합니다.

http://jsfiddle.net/abdmob/gkxucxrj/1/ 온라인 데모

var x2js = new X2JS();
function convertXml2JSon() {
    $("#jsonArea").val(JSON.stringify(x2js.xml_str2json($("#xmlArea").val())));
}

function convertJSon2XML() {
    $("#xmlArea").val(x2js.json2xml_str($.parseJSON($("#jsonArea").val())));
}

convertXml2JSon();
convertJSon2XML();
$("#convertToJsonBtn").click(convertXml2JSon);
$("#convertToXmlBtn").click(convertJSon2XML);

다음 답변이 이 기능을 만드는 데 큰 도움이 되었습니다.

function xml2json(xml) {
  try {
    var obj = {};
    if (xml.children.length > 0) {
      for (var i = 0; i < xml.children.length; i++) {
        var item = xml.children.item(i);
        var nodeName = item.nodeName;

        if (typeof (obj[nodeName]) == "undefined") {
          obj[nodeName] = xml2json(item);
        } else {
          if (typeof (obj[nodeName].push) == "undefined") {
            var old = obj[nodeName];

            obj[nodeName] = [];
            obj[nodeName].push(old);
          }
          obj[nodeName].push(xml2json(item));
        }
      }
    } else {
      obj = xml.textContent;
    }
    return obj;
  } catch (e) {
      console.log(e.message);
  }
}

jquery dom/xml 객체를 통과하면 다음과 같습니다.

Jquery(this).find('content').eq(0)[0]

여기서 content는 xml을 저장하는 필드입니다.

라이브러리를 설치하지 않을 경우를 대비해 regex를 기반으로 재귀 함수를 만들었습니다. 이 함수는 다음과 같습니다.

const xmlSample = '<tag>tag content</tag><tag2>another content</tag2><tag3><insideTag>inside content</insideTag><emptyTag /></tag3>';
console.log(parseXmlToJson(xmlSample));

function parseXmlToJson(xml) {
    const json = {};
    for (const res of xml.matchAll(/(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm)) {
        const key = res[1] || res[3];
        const value = res[2] && parseXmlToJson(res[2]);
        json[key] = ((value && Object.keys(value).length) ? value : res[2]) || null;

    }
    return json;
}

각 루프에 대한 정규식 설명:

  • res[0] - xml을 (있는 그대로) 반환합니다.
  • res[1] - xml 태그 이름을 반환합니다.
  • res[2] - xml 콘텐츠를 반환합니다.
  • res[3] - 태그가 자동으로 닫힐 경우 xml 태그 이름을 반환합니다.예:<tag />

regex 의 동작에 대해서는, https://regex101.com/r/ZJpCAL/1 를 참조해 주세요.

주의: json에 정의되지 않은 값이 있는 키가 있는 경우 해당 키는 삭제됩니다.그래서 9행 끝에 늘을 넣었어요.

txml 을 사용할 수도 있습니다.단순한 오브젝트로 이루어진 DOM으로 해석하여 스트링화할 수 있습니다.그 결과, 컨텐츠가 트리밍 됩니다.그래서 원본을 흰색 스페이스로 만드는 것은 없어질 것이다.그러나 이것은 HTML을 최소화하는 데 매우 유용하게 사용될 수 있습니다.

const xml = require('txml');
const data = `
<tag>tag content</tag>
<tag2>another content</tag2>
<tag3>
  <insideTag>inside content</insideTag>
  <emptyTag />
</tag3>`;

const dom = xml(data); // the dom can be JSON.stringified

xml.stringify(dom); // this will return the dom into an xml-string

면책사항:저는 javascript에서 가장 빠른 xml 파서인 txml의 저자입니다.

얼마 전에 TV 워치리스트 앱용 툴 https://bitbucket.org/surenrao/xml2json을 작성했습니다.이 툴도 도움이 되길 바랍니다.

Synopsys:xml을 json으로 변환할 뿐만 아니라 (순환 오류 없이) 쉽게 디버깅하고 json을 xml로 다시 만들 수 있는 라이브러리입니다.기능 : - xml에서json 객체를 해석합니다.json 개체를 xml로 다시 인쇄합니다.xml을 인덱스로 저장하는 데 사용할 수 있습니다.X2J 개체로서의 DB.json 개체를 인쇄합니다.

xmlToJson의 을 얻기 위해 xmlToJson을 .
xml을 사용하다)

let xml =
'<person>' +
  ' <id>762384324</id>' +
  ' <firstname>Hank</firstname> ' +
  ' <lastname>Stone</lastname>' +
'</person>';

let getXmlValue = function(str, key) {
  return str.substring(
    str.lastIndexOf('<' + key + '>') + ('<' + key + '>').length,
    str.lastIndexOf('</' + key + '>')
  );
}


alert(getXmlValue(xml, 'firstname')); // gives back Hank

면책사항:fast-xml-parser를 작성했습니다.

Fast XML 파서는 XML을 JSON으로 변환하거나 그 반대로 변환할 수 있습니다.예를 들어 다음과 같습니다.

var options = {
    attributeNamePrefix : "@_",
    attrNodeName: "attr", //default is 'false'
    textNodeName : "#text",
    ignoreAttributes : true,
    ignoreNameSpace : false,
    allowBooleanAttributes : false,
    parseNodeValue : true,
    parseAttributeValue : false,
    trimValues: true,
    decodeHTMLchar: false,
    cdataTagName: "__cdata", //default is 'false'
    cdataPositionChar: "\\c",
};
if(parser.validate(xmlData)=== true){//optional
    var jsonObj = parser.parse(xmlData,options);
}

JSON 또는 JS 개체를 XML로 해석하는 경우

//default options need not to set
var defaultOptions = {
    attributeNamePrefix : "@_",
    attrNodeName: "@", //default is false
    textNodeName : "#text",
    ignoreAttributes : true,
    encodeHTMLchar: false,
    cdataTagName: "__cdata", //default is false
    cdataPositionChar: "\\c",
    format: false, 
    indentBy: "  ",
    supressEmptyNode: false
};
var parser = new parser.j2xParser(defaultOptions);
var xml = parser.parse(json_or_js_obj);

여기에서는 문서화되어 매우 유명한npm 라이브러리에서 xml <-> js 변환을 매우 잘 하는 좋은 툴이 있습니다.상기 제안 솔루션의 일부(아마도 모두)와는 달리 xml 코멘트도 변환합니다.

var obj = {name: "Super", Surname: "Man", age: 23};

var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);

6개의 심플한 ES6 라인:

xml2json = xml => {                                                                                                                                                     
  var el = xml.nodeType === 9 ? xml.documentElement : xml                                                                                                               
  var h  = {name: el.nodeName}                                                                                                                                          
  h.content    = Array.from(el.childNodes || []).filter(e => e.nodeType === 3).map(e => e.textContent).join('').trim()                                                  
  h.attributes = Array.from(el.attributes || []).filter(a => a).reduce((h, a) => { h[a.name] = a.value; return h }, {})                                                 
  h.children   = Array.from(el.childNodes || []).filter(e => e.nodeType === 1).map(c => h[c.nodeName] = xml2json(c))                                                    
  return h                                                                                                                                                              
}  

스트로 합니다.echo "xml2json_example()" | node -r xml2json.es6(출처: https://github.com/brauliobo/biochemical-db/blob/master/lib/xml2json.es6 )

저는 개인적으로 이 도구를 추천합니다.XML-JSON 변환기입니다.

이것은 매우 가볍고 순수 자바스크립트로 되어 있다.의존관계는 없습니다.코드에 함수를 추가하여 원하는 대로 사용할 수 있습니다.

XML 속성도 고려됩니다.

var xml = ‘<person id=”1234” age=”30”><name>John Doe</name></person>’;
var json = xml2json(xml); 

console.log(json); 
// prints ‘{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}’

여기 온라인 데모가 있습니다!

메서드가 jsonToXml(json) 및 xmlToJson(xml)인 오픈소스 라이브러리 Xml-to-json이 있습니다.

여기 온라인 데모가 있습니다!

서버측을 클라이언트측으로 사용하는 가장 좋은 방법은, 모든 시나리오에서 올바르게 동작하는 것은 아닙니다.javascript를 사용하여 온라인 json-to xml 및 xml-to-json 컨버터를 구축하려고 했는데 모든 시나리오에서 작동하지 않아 거의 불가능하다고 느꼈습니다.결국 ASP의 Newtonsoft를 사용하여 서버 측에서 작업을 수행하게 되었습니다.MVC. 여기 온라인 컨버터 http://techfunda.com/Tools/XmlToJson가 있습니다.

언급URL : https://stackoverflow.com/questions/1773550/convert-xml-to-json-and-back-using-javascript