Comment convertir du XML en JSON, puis de nouveau en XML ?
Les outils suivants fonctionnent assez bien, mais ne sont pas totalement cohérents :
Quelqu'un a-t-il déjà rencontré cette situation ?
Comment convertir du XML en JSON, puis de nouveau en XML ?
Les outils suivants fonctionnent assez bien, mais ne sont pas totalement cohérents :
Quelqu'un a-t-il déjà rencontré cette situation ?
Vous pouvez également utiliser txml . Il est capable d'analyser un DOM composé d'objets simples et de le filtrer. Dans le résultat, le contenu sera rogné. Ainsi, le formatage de l'original avec des espaces sera perdu. Mais cela pourrait être très bien utilisé pour réduire le 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
Disclaimer : Je suis l'auteur de txml le parseur xml le plus rapide en javascript.
J'utilisais xmlToJson juste pour obtenir une seule valeur du xml.
J'ai trouvé que faire ce qui suit est beaucoup plus facile (si le xml ne se produit qu'une fois )
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
Avertissement : J'ai écrit analyseur fast-xml
Fast XML Parser peut aider à convertir XML en JSON et vice versa. Voici un exemple ;
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);
}
Si vous voulez analyser JSON ou un objet JS en XML, alors
//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);
Ici ' un bon outil issu d'une bibliothèque npm documentée et très célèbre qui fait très bien les conversions xml <-> js : différemment de certaines (peut-être toutes) des solutions proposées ci-dessus, il convertit également les commentaires xml.
var obj = {name: "Super", Surname: "Man", age: 23};
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
En 6 simples lignes 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
}
Test avec echo "xml2json_example()" | node -r xml2json.es6
avec la source à https://github.com/brauliobo/biochemical-db/blob/master/lib/xml2json.es6
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
11 votes
Expliquez les incohérences, s'il vous plaît.
4 votes
Plus précisément, il s'agissait de convertir des tableaux JSON avec un seul élément en XML. Lorsque vous le reconvertissiez en JSON, au lieu d'un tableau à un élément, il créait un objet littéral. Je l'ai contourné en vérifiant le type avec $.isArray(), et en l'intégrant dans un tableau si !$.isArray().
1 votes
Xml2json - fyneworks.com/jquery/xml-to-json - Les ruptures lancent 500 à partir du 15/02/2013 14:25 AEST
0 votes
Le lien json2xml est cassé.
0 votes
@ysrb L'exemple de plugin ne fonctionnera pas dans IE8 !
0 votes
github.com/javadev/xml-to-json Je suis le gardien de la bibliothèque.
0 votes
Avez-vous essayé ? devtoolsonline20190908040816.azurewebsites.net/DevTools/