转换为 JSON 的 XML 节点会出错

xml node converted to json gives an error

本文关键字:节点 出错 XML JSON 转换      更新时间:2023-09-26

我知道有很多类似的问题(花了2-3天寻找解决方案) 但是他们中的大多数都引用了XML2jsonJson2XML等库。这不是我想要的...

所以问题来了:我想从XML读取并将其保存到JSON对象,使用纯javascript,而不是jQuery,不是库,只是纯javascript。感谢您的任何帮助!

0) XML

<ipod>
    <playlist>
        <name>All</name>
        <contents>
            <song>
                <title>Miley_Cyrus_-_We_Can't_Stop</title>
            </song>
            <song>
                <title>Miley_Cyrus_-_Wrecking Ball</title>
            </song>
        </contents>
    </playlist>
</ipod>

1) JavaScript//有错误

var fileData = 
{
    "title":"non"
};
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", '1.xml',false);
xmlhttp.send();
xml=xmlhttp.responseXML;
for (var index=0; index<2; index++)
{
  fileData.title[index]=xml.getElementsByTagName("title")[index].childNodes[0].nodeValue;
  console.log(fileData.title[index]);
}
//output:
//n
//o

2) jQuery//没有错误

var fileData = 
{
    "title":"non"
};
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", '1.xml',false);
xmlhttp.send();
xml=xmlhttp.responseXML;
fileData.artist = $(xml).find('artist');
for (var index=0; index<3; index++)
{
  fileData.url[index]=fileData.url[index].textContent;
  console.log(fileData.title[index]);
}
//output:
//Miley_Cyrus_-_We_Can't_Stop
//Miley_Cyrus_-_Wrecking Ball

İ 如果您不将 fileData.title 初始化为字符串,而是初始化为一个对象,这将适用于您的本机版本。改变

"title":"non" to "title":{}

如果要解析 xml,只需使用正则表达式:

var titles = xml.match(/<title>([^<]*)<'/title>/g).map(function(x) { return x.substring(7,x.length-8); })