2011-06-01 118 views
1

作爲我畢業的一部分,我必須將XML文件遷移到CouchDB。該結構將文件轉換爲JSON的是一點問題都沒有,但有我想不出如何實際地轉換一部分:如何將XML轉換爲JSON?

<p>We beg to send us immediately [...] <note> 
    <p>In the original, [...]</p> 
</note><lb/><add>by post</add> one copy of 
<title>A Book</title> by <persName> 
    <choice><abbr>Mrs.</abbr><expan>Misses</expan></choice>Jane Smith</persName>. 
As soon<lb/> we know the <choice> 
        <sic>prize</sic> 
        <corr>price</corr> 
       </choice>the amount [...]<lb/> by post.<lb/> 
</p> 

我想堅持到JSON和不在JSON中使用XML,因爲我需要爲我的程序實現XML功能。

什麼是'最佳實踐'或解決這個問題的方法?

+3

這應該真正在計算器。 – TheLQ 2011-06-01 19:54:39

+0

@TheLQ:同意,但我的程序員.SE帳戶沒有足夠的代表進行投票。 ; - \ – 2011-06-01 19:56:15

+0

@Brad您可以標記該問題,直到您有足夠的代表投票結束。 – 2011-06-02 00:14:26

回答

2

下面的工作,雖然是與PITA合作。代表每個標記系統如下:

{ 
    attr => {...}, 
    tag => "...", 
    content => [...] 
} 

而且content爲文本(標籤外),否則標籤的數組。

忽略空格和縮進您的片段將成爲類似:

{ 
    tag => "p", 
    content => [ 
    "We beg to send us immediately [...]", 
    { 
     tag => "note", 
     content => [ 
     { 
      tag => "p", 
      content => [ "In the original, [...]" ] 
     } 
     ] 
    }, 
    { tag => "lb" }, 
    { 
     tag => "add", 
     content => [ "by post" ], 
    }, 
    " one copy of ", 
    { 
     tag=> "title", 
     content => [ "A Book" ], 
    }, 
    " by ", 
    { 
     tag => "persName", 
     content => [ 
     { 
      tag => "choice", 
      content => [ ... ] 
     } 
     ], 
    }, 
    ... 
    ] 
} 

(我覺得無聊代表它,對不起。)

注意,數據結構非常重複和繁瑣。但是,您將以編程方式處理JSON,因此數據結構完全可預測和規則是非常有用的。

+0

這看起來確實像是一個痛苦的工作。但這是一個好的開始,謝謝! – Patrick 2011-06-01 18:51:24

0

使用Unicode簡化anonymous block boxes轉換:

JSON.stringify({"domelement": 
    { 
    "p": "We beg to send us immediately [...]", 
    "note": {"p":"In the original, [...]"}, 
    "add": "by post \u0022one copy of\u0022", 
    "title": "A Book \u0022by\u0022", 
    "choice": [{"abbr":"Mrs."}, {"expan":"Misses \u0022Jane Smith\u0022 \u0022As soon\u0022 \u0022we know the\u0022"}], 
    "choice": {"sic":"prize"}, 
    "corr": "price \u0022the amount [...]\u0022" 
    } 
}) 

參考