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": ""
}
}
}
}
}
}
}