2015-09-24 44 views
-4

我想XML轉換成JSON按照下面的例子將XML轉換成JSON在@和#格式: 示例XML:需要使用JAVA只

<Details> 
     <Records> 
      <name id='123'>xyz</name> 
      <age>25</age> 
      <gender type='male' /> 
      </Records> 
    </Details> 

預計JSON輸出:

{ 
    "Details": { 
    "Records": { 
     "name": { 
     "@id": "123", 
     "#text": "xyz" 
     }, 
     "age": "25", 
     "gender": { 
     "@type": "male" 
     } 
    } 
    } 
} 

請幫幫我。

+1

你有密碼嗎? – Rehman

+1

你有什麼嘗試?你想使用什麼工具/庫?你的問題現在太不明確 - 有很多方法可以做到這一點。 –

+0

請按照下面的網址, [1] [1] [使用Javascript,jQuery的XML轉換到的JSONObject]:http://stackoverflow.com/questions/20679135/convert-xml-to-jsonobject -using-javascript-jquery –

回答

0

創建數據的類表示。然後使用像Jackson這樣的對象映射器來理解JSON和XML。從XML反序列化並序列化爲JSON。

+0

我需要使它成爲可處理任何模式的通用函數。 –

+0

Jackson是一個通用的映射工具。但是您需要定義一個類作爲XML和JSON之間的通用數據模型,用於描述所需輸出的形狀。該類可以像Map一樣通用,但是如果沒有正確的定義,您將無法獲得特定的結果。 – sh0rug0ru

0

如果你使用的是Java 8,你應該看看我的unXml-library。它是開源的,可在Maven Central上找到。

此代碼將工作項目

import com.nerdforge.unxml.Parsing; 
import com.nerdforge.unxml.factory.ParsingFactory; 
import org.w3c.dom.Document; 
import java.util.List; 

public class Parser { 
    public ObjectNode parseXml(String xml){ 
     Parsing parsing = ParsingFactory.getInstance().create(); 
     Document document = parsing.xml().document(xml); 

     Parser<ObjectNode> parser = parsing.obj("Details") 
      .attribute("Records", parsing.obj("Records") 
       .attribute("name", parsing.obj("name") 
        .attribute("@id", "@id") 
        .attribute("#text", "text()") 
       ) 
       .attribute("age", "age") 
       .attribute("gender", parsing.obj("gender") 
        .attribute("@type", "@type") 
       ) 
      ) 
      .build(); 

     ObjectNode result = parser.apply(document); 
     return result; 
    } 
} 

請注意,這個庫的整點,是從使用的XPath個XML提取值,並將其分配給在JSON對象屬性。所以你可以創建「更好的」Json,它不受xml結構的約束。

public class Parser { 
    public ArrayNode parseXml(String xml){ 
     Parsing parsing = ParsingFactory.getInstance().create(); 
     Document document = parsing.xml().document(xml); 

     Parser<ArrayNode> parser = parsing.arr("//Records", parsing.obj() 
      .attribute("id", "name/@id", parsing.number()) 
      .attribute("name") // name is both the xpath, and json-attribute key 
      .attribute("age", "age", parsing.number()) 
      .attribute("gender", "gender/@type") 
     ).build(); 

     ArrayNode result = parser.apply(document); 
     return result; 
    } 
} 

將返回的JSON

[{ 
    id: 123, 
    name: "xyz", 
    age: 25, 
    gender: "male" 
}] 

使用parsing.arr("<xpath>", ...)創建數組。

+1

只有當我知道xml結構向我發送時,這纔會起作用。但是XML標籤可能會有所不同。 –

+0

@ShayanSingla這是正確的。你必須提前知道你的xml結構才能使用'unXml'。 – tomaj

+0

@ShayanSingla我的用例經常涉及到後來在基於JS的Web應用程序中使用Json。儘可能簡化模型的服務器端被認爲是一種很好的做法,所以客戶端JavaScript可以儘可能簡單。 JS代碼也會(通常)期望一個定義良好的對象(或對象數組)。 – tomaj