java 传xml js_JavaScript实现的XML与JSON互转功能详解

本文实例讲述了JavaScript实现的XML与JSON互转功能。分享给大家供大家参考,具体如下:

这里来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转json的例子,希望这些例子能给你带来帮助。

最近在开发在线XML编辑器,打算使用JSON做为中间格式。因为JSON相对于XML,有着容易阅读、解析速度快、占用空间小等优点,更易于在WEB上传递数据。但在实际使用中还是发现了一些易于忽略的细节,对于需要严格保证XML原始结构的情况,在转换成JSON时需要一些注意。

XML转换成JSON的格式大概如下:

XML形式

文章标题

章节标题

章节段落

JSON表现形式

{

"article": {

"header": {

"#text": "文章标题",

"@id": "h1"

},

"section": {

"@id": "s1",

"header": "章节标题",

"p": "章节段落"

}

}

}

用Js将XML转换成JSON的脚本,在网上找了一些现成的脚本,但大都只满足比较简单的情况,都不可以完成保证原始结构的互转。下面是从网上找到的一些脚本或者文章:

x2js  : https://code.google.com/p/x2js/

jsonxml :http://davidwalsh.name/convert-xml-json

JKL.ParseXML :http://www.kawa.net/works/js/jkl/parsexml-e.html

x2js不会将下面的XML正确还原。

//XML形式

章节

而第2个脚本jsonxml,在上面这种“文本混合标签”的情况下,没有将标签提取出来,而是转换成了下面这种格式。

{"p":"章节"}}

之后我做了些改动,将它解析成如下格式后,满足了“文本混合标签”可正确还原的情况。

{"p":[{"strong":"章节"},"段",{"em":"落"}]}

另外,形如下面的代码,使用上文提到的脚本进行转换,也会导致无法正确还原的情况。

第一节

标题

第二节

同样,在一个标签内,它的子标签出现了大于一次,如果需要记录数据的路径,应该使用数组来保存这个结构。正确的代码应该是:

{

"article": [ {

"section": {

"#text": "第一节",

"@id": "s1"

},

}, {

"header": {

"#text": "标题",

"@id": "h1"

}

}, {

"section": {

"#text": "第一节",

"@id": "s2"

}

}

]

}

jkl.parsexml

10036

NY

New York

Broadway

SAMPLE SCRIPT:

var url = "zip-e.xml";

var xml = new JKL.ParseXML( url );

var data = xml.parse();

document.write( data["items"]["item"]["us_state"] );

document.write( data.items.item.us_state );

// -->

OUTPUT JSON:

{

items: {

item: {

zip_cd: "1000001"

us_state: "NY",

us_city: "New York",

us_dist: "Broadway",

}

}

};

jsonxml

// Changes XML to JSON

function xmlToJson(xml) {

// Create the return object

var obj = {};

if (xml.nodeType == 1) { // element

// do attributes

if (xml.attributes.length > 0) {

obj["@attributes"] = {};

for (var j = 0; j < xml.attributes.length; j++) {

var attribute = xml.attributes.item(j);

obj["@attributes"][attribute.nodeName] = attribute.nodeValue;

}

}

} else if (xml.nodeType == 3) { // text

obj = xml.nodeValue;

}

// do children

if (xml.hasChildNodes()) {

for(var i = 0; i < xml.childNodes.length; i++) {

var item = xml.childNodes.item(i);

var nodeName = item.nodeName;

if (typeof(obj[nodeName]) == "undefined") {

obj[nodeName] = xmlToJson(item);

} else {

if (typeof(obj[nodeName].push) == "undefined") {

var old = obj[nodeName];

obj[nodeName] = [];

obj[nodeName].push(old);

}

obj[nodeName].push(xmlToJson(item));

}

}

}

return obj;

};

The major change I needed to implement was using attributes.item(j) instead of the attributes[j] that most of the scripts I found used.  With this function, XML that looks like:

...becomes workable a JavaScript object with the following structure:

{

"@attributes": {

AID: "=",

HOME: 0,

URL: "davidwalsh.name/",

VER: "0.9",

},

SD = [

{

"@attributes": {

FLAGS: "",

HOST: "davidwalsh.name",

TITLE: A

},

LINKSIN: {

"@attributes": {

NUM: 1102

}

},

SPEED: {

"@attributes": {

PCT: 51,

TEXT: 1421

}

},

TITLE: {

"@attributes": {

TEXT: "David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else",

}

},

},

{

POPULARITY: {

"@attributes": {

TEXT: 7131,

URL: "davidwalsh.name/"

}

},

RANK: {

"@attributes": {

DELTA: "-1648"

}

},

REACH: {

"@attributes": {

RANK = 5952

}

}

}

]

}

说了半天下面整理了一个例子

function xmlToJson(xml) {

// Create the return object

var obj = {};

if (xml.nodeType == 1) { // element

// do attributes

if (xml.attributes.length > 0) {

obj["@attributes"] = {};

for (var j = 0; j < xml.attributes.length; j++) {

var attribute = xml.attributes.item(j);

obj["@attributes"][attribute.nodeName] = attribute.nodeValue;

}

}

} else if (xml.nodeType == 3) { // text

obj = xml.nodeValue;

}

// do children

if (xml.hasChildNodes()) {

for (var i = 0; i < xml.childNodes.length; i++) {

var item = xml.childNodes.item(i);

var nodeName = item.nodeName;

if (typeof (obj[nodeName]) == "undefined") {

obj[nodeName] = xmlToJson(item);

} else {

if (typeof (obj[nodeName].length) == "undefined") {

var old = obj[nodeName];

obj[nodeName] = [];

obj[nodeName].push(old);

}

obj[nodeName].push(xmlToJson(item));

}

}

}

return obj;

};

PS:这里再为大家提供几款关于xml与json操作的在线工具供大家参考使用:

希望本文所述对大家JavaScript程序设计有所帮助。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值