XMLからJSONに変換してから、XMLに戻すにはどうすればよいでしょうか。
次のツールは非常にうまく機能しますが、完全に一貫しているわけではありません。
誰かが以前にこの状況に遭遇したことがありますか?
XMLからJSONに変換してから、XMLに戻すにはどうすればよいでしょうか。
次のツールは非常にうまく機能しますが、完全に一貫しているわけではありません。
誰かが以前にこの状況に遭遇したことがありますか?
回答:
これが一番だと思います: XMLとJSONの間の変換
xml.com O'Reillyのサイトにある付随する記事を必ずお読みください。この記事では、これらの変換に関する問題について詳しく説明しています。O'Reillyがこの記事をホストしているという事実は、Stefanのソリューションにメリットがあることを示しているはずです。
https://github.com/abdmob/x2js-自分のライブラリ(http://code.google.com/p/x2js/からの更新されたURL ):
このライブラリは、XMLからJSON(JavaScriptオブジェクト)へ、およびその逆のJavaScript変換関数を提供します。ライブラリは非常に小さく、他の追加のライブラリを必要としません。
API関数
- 新しい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]
どこ内容は、私は私のXMLを格納したフィールドでした。
しばらく前に、私はこのテレビウォッチリストアプリ用にこのツールhttps://bitbucket.org/surenrao/xml2jsonを作成しました。
Synopsys:xmlをjsonに変換するだけでなく、簡単にデバッグ(循環エラーなし)し、jsonをxmlに再作成するライブラリ。機能:-jsonオブジェクトにXMLを解析します。jsonオブジェクトをxmlに出力します。XMLをX2JオブジェクトとしてIndexedDBに保存するために使用できます。jsonオブジェクトを印刷します。
私は個人的にこのツールをお勧めします。XMLからJSONへのコンバーターです。
非常に軽量で、純粋なJavaScriptを使用しています。依存関係は必要ありません。コードに関数を追加するだけで、好きなように使用できます。
また、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”}}’
こちらがオンラインデモです!
免責事項:私は書いた fast-xml-parserを作成しました
高速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);
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
}
https://github.com/brauliobo/biochemical-db/blob/master/lib/xml2json.es6echo "xml2json_example()" | node -r xml2json.es6
でソースを使用してテストする
xmlの単一の値を取得するためだけにxmlToJsonを使用していました。
以下を実行する方がはるかに簡単であることがわかりました(xmlが1回しか発生しない場合)。
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
ライブラリをインストールして何が起こっているかの背後にあるロジックを理解したくない場合に備えて、正規表現に基づいて再帰関数を作成しました。
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;
}
各ループの正規表現の説明:
<tag />
ここで正規表現がどのように機能するかを確認できます: https //regex101.com/r/ZJpCAL/1
注:jsonに未定義の値のキーがある場合、それは削除されます。そのため、9行目の終わりにnullを挿入しました。
クライアント側としてサーバー側を使用してそれを行う最良の方法は、すべてのシナリオでうまく機能するわけではありません。私はjavascriptを使用してオンラインのjsonからxmlおよびxmlからjsonへのコンバーターを構築しようとしていましたが、すべてのシナリオで機能していないため、ほとんど不可能だと感じました。最終的には、ASP.MVCでNewtonsoftを使用してサーバー側で実行することになりました。こちらがオンラインコンバーターですhttp://techfunda.com/Tools/XmlToJson