Umformen von XML in JSON

Aus Imperia Support Wiki

Generelle Regeln zum Umformen von XML in JSON. Grundvoraussetzung ist ein Schema für das umzuformende XML, dass die genaue Feststellung der Kombinationsmöglichkeiten des XML erlaubt.

Root-Knoten

Der Root-Knoten entfällt in JSON.

 <rss>
   <channel /> 
 <rss>

wird zu

 {
   "channel":""
 }

Knoten

Knoten-Namen werden zu Objekt-Eigenschaften in JSON. Knoten-Namen mit Namensräumen werden an Stelle eines : mit _ geschrieben. Die Groß- / Kleinschreibung bleibt gewahrt.

 <rss>
   <channel>
     <title />
     <atom:link />
   </channel> 
 <rss>

wird zu

 {
   "channel":{
     "title":"",
     "atom_link":""
   }
 }

Kind-Knotennamen, die mehrfach in einem Knoten vorkommen

…werden zu einer Objekteigenschaft im JSON, deren Name der Mehrzahl des ursprünglichen Tagnamens entspricht, z.B. <item> als "items". Die Eigenschaft enthält dann ein Array von Objekten.

 <rss>
   <channel>
     <title />
     <item />
     <item />
     <item />
   </channel> 
 </rss>

wird zu

 {
   "channel":{
     "title":"",
     "items:[
       "",
       "",
       ""
     ]
   }
 }

Text-Inhalte eines Knotens

… werden zu Strings respektive Integers in JSON.

 <rss>
   <channel>
     <title>Test</title>
   </channel> 
 </rss>

wird zu

 {
   "channel":{
     "title":"Test",
   }
 }

Knoten mit Attributen

Werden als Objekt geschrieben, so dass jedes Attribut eine Objekteigenschaft ist.

 <head>
   <link rel="stylesheet" type="text/css" href="style.css" /> 
 <head>

wird zu

 {
   "link":{
     "rel":"stylesheet",
     "type":"text/css",
     "href":"style.css"
   }
 }

Knoten mit Attributen und Kindknoten werden zu gleichberechtigten Kind-Eigenschaften des Objekts in JSON. Falls ein Attributname und Sub-Tag identisch sind, wird das Attribut nicht angegeben.

 <rss version="2.0">
   <channel /> 
 </rss>

wird zu

 {
   "version":"2.0",
   "channel":""
 }

Knoten mit Attributen und/oder Kindknoten und Text-Inhalten werden wie o.a. gebildet. Der Textinhalt wird aber in eine Objekteigenschaft _content ausgelagert.

 <rss version="2.0">
   <channel /> 
   Text
 </rss>

wird zu

 {
   "version":"2.0",
   "channel":"",
   "_content":"Text"
 }

Diese Vorschrift wird u.a. bei JSON-RSS verwendet.