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
'programing' 카테고리의 다른 글
Cognito 사용자 풀 및 Wordpress 사용자(AWS에서 Wordpress에 서명) (0) | 2023.02.07 |
---|---|
Phonegap 앱에서 Wordpress 게시물을 가져올 때 Access-Control-Allow-Origin 오류가 발생함 (0) | 2023.02.07 |
태그 또는 설명별 WooCommerce 제품 검색 게시물 조회 (0) | 2023.02.07 |
Asp.net WEBAPI에서 JSON 문자열을 명시적으로 반환하시겠습니까? (0) | 2023.02.07 |
SQL Server 스토어드 프로시저를 MySQL(MariaDB)로 다시 쓰기 (0) | 2023.01.30 |