キーは各プレーヤー ( code
、position
、countrycode
) で同じであるため、連想配列は使用できません (JavaScript では、実際には存在しませんが、 を使用できますObject
)。オブジェクトの配列を使用する必要があります。これが私がそれを行う方法です:
var str = '<root><player><roster><player code="AUQ" position="Guard" countrycode="SRB"/><player code="AQX" position="Forward" countrycode="GER"/></roster></player><player><roster><player code="AUQ1" position="Guard" countrycode="SRB"/><player code="AQX1" position="Forward" countrycode="GER"/></roster></player></root>',
oParser = new DOMParser(),
xmlDoc = oParser.parseFromString(str, "text/xml");
var players = xmlDoc.getElementsByTagName("player"),
ret = [], i, j, cur;
for (i = 0, j = players.length; i < j; i++) {
cur = players[i];
if (cur.hasAttribute("code")) {
ret.push({
code: cur.getAttribute("code"),
position: cur.getAttribute("position"),
countrycode: cur.getAttribute("countrycode")
});
}
}
console.log(ret);
デモ: http://jsfiddle.net/2GPBY/1/
そのキーのすべての値へのキーの 1 つのマップを作成する場合は、これを使用できます。
var str = '<root><player><roster><player code="AUQ" position="Guard" countrycode="SRB"/><player code="AQX" position="Forward" countrycode="GER"/></roster></player><player><roster><player code="AUQ1" position="Guard" countrycode="SRB"/><player code="AQX1" position="Forward" countrycode="GER"/></roster></player></root>',
oParser = new DOMParser(),
xmlDoc = oParser.parseFromString(str, "text/xml");
var players = xmlDoc.getElementsByTagName("player"),
ret = {}, i, j, cur;
for (i = 0, j = players.length; i < j; i++) {
cur = players[i];
if (cur.hasAttribute("code")) {
if (!("code" in ret)) {
ret.code = [];
}
ret.code.push(cur.getAttribute("code"));
if (!("position" in ret)) {
ret.position = [];
}
ret.position.push(cur.getAttribute("position"));
if (!("countrycode" in ret)) {
ret.countrycode = [];
}
ret.countrycode.push(cur.getAttribute("countrycode"));
}
}
console.log(ret);
デモ: http://jsfiddle.net/2GPBY/3/