请不要评论说您无法使用正则表达式解析 XML,它可以做到,但这不是最好的方法。请不要无缘无故否定这个问题。
在 Parse.com 的云代码上,您目前无法在没有大量编码工作的情况下将 XML 转换为 json。我在以下位置找到了以下代码:http: //killzonekid.com/worlds-smallest-fastest-xml-to-json-javascript-converter/
xml = xml.replace(/\s/g, ' ').replace(/< *\?[^>]*?\? *>/g, '').replace(/< *!--[^>]*?-- *>/g, '').replace(/< *(\/?) *(\w+\b):(\w+\b)/g, '<$1$2_$3').replace(/< *(\w+\b)([^>]*?)\/ *>/g, '< $1$2>').replace(/(\w+\b):(\w+\b) *= *"([^>]*?)"/g, '$1_$2="$3"').replace(/< *(\w+\b)((?: *\w+ *= *" *[^"]*?")+ *)>( *[^< ]*?\b.*?)< *\/ *\1 *>/g, '< $1$2 value="$3">').replace(/ *(\w+\b) *= *"([^>]*?)" */g, '< $1>$2').replace(/< *(\w+\b) *</g, '<$1>< ').replace(/> *>/g, '>').replace(/< *\/ *(\w+\b) *> *< *\1 *>/g, '').replace(/"/g, '\\"').replace(/< *(\w+\b) *>([^<>]*?)< *\/ *\1 *>/g, '"$1":"$2",').replace(/< *(\w+\b) *>([^<>]*?)< *\/ *\1 *>/g, '"$1":{$2},').replace(/< *(\w+\b) *>(?=.*?< \/\1\},\{)/g, '"$1":[{').split(/\},\{/).reverse().join('},{').replace(/< *\/ *(\w+\b) *>(?=.*?"\1":\[\{)/g, '}],').split(/\},\{/).reverse().join('},{').replace(/< \/(\w+\b)\},\{\1>/g, '},{').replace(/< *(\w+\b)[^>]*?>/g, '"$1":{').replace(/< *\/ *\w+ *>/g,'},').replace(/\} *,(?= *(\}|\]))/g, '}').replace(/] *,(?= *(\}|\]))/g, ']').replace(/" *,(?= *(\}|\]))/g, '"').replace(/ *, *$/g, '');
它实际上在将 XML 转换为 json 方面做得很好。
代码有一些怪癖。1.它弄乱了属性。
- 它不喜欢带有连字符的名称。为了修复连字符,我将所有 \w+ 更改为 \w[\w'-] 这是最好的方法吗?
这是一个示例 XML 文档
<?xml version="1.0" encoding="UTF-8" ?>
<api>
<products total-matched="1618" records-returned="1" page-number="1">
<product>
<ad-id>1234</ad-id>
<supplier-name>Window World</supplier-name>
<supplier-category>3703703</supplier-category>
<buy-url>http://website.com</buy-url>
<currency>USD</currency>
<description>Window</description>
<image-url>http://website.com/windowa/80x80.jpg</image-url>
<in-stock>yes</in-stock>
<manufacturer-name>Window World</manufacturer-name>
<name>Half Pain Glass</name>
<price>31.95</price>
<retail-price>87.60</retail-price>
<sale-price>29.95</sale-price>
<sku>5938</sku>
<upc></upc>
</product>
</products>
</api>
示例输出:
{
"api": {
"products": {
"total-matched": {
1618 "records-returned": {
1 "page-number": {
1 >
"product": {
"adid": "1234",
"suppliername": "Window World",
"suppliercategory": "3703703",
"buyurl": "http://website.com",
"currency": "USD",
"description": "Window",
"imageurl": "http://website.com/windowa/80x80.jpg",
"instock": "yes",
"manufacturername": "Window World",
"name": "Half Pain Glass",
"price": "31.95",
"retailprice": "87.60",
"saleprice": "29.95",
"sku": "5938",
"upc": ""
}
}
}
}
}
}
}