2016-10-30 4 views
2

XML에서 태그 속성을 제거하는 Java에서 JSON으로 XML을 변환하려고합니다.속성을 무시하고 XML을 JSON으로 변환

org.json.XML을 사용해 보았지만 내 요구를 충족시키지 못했습니다.

내가하고 싶은 것을하기위한 라이브러리가 있습니까?

예 입력 :

<?xml version="1.0"?> 
<company g="j"> 
    <staff id="1001"> 
     <firstname hi="5">jim</firstname> 
     <lastname>fox</lastname> 
    </staff> 
    <staff id="2001"> 
     <firstname a="7">jay</firstname> 
     <details tmp="0"> 
      <lastname>box</lastname> 
      <nickname >fong fong</nickname> 
      <salary id="99">200000</salary> 
     </details> 
    </staff> 
</company> 

원하는 출력 :

{ 
    "company": { 
     "staff": [ 
      { 
       "firstname": "jim" 
       "lastname": "fox", 
      }, 
      { 
       "firstname": "jay", 
       "details": { 
        "lastname": "box", 
        "nickname": "fong fong", 
        "salary":"200000", 
      } 
     ] 
    } 
} 

내가 시도한 다음 있지만 속성 사용하여 XML 변환 :

package my.transform.data.utils; 

import java.io.File; 
import org.apache.commons.io.FileUtils; 
import org.json.XML; 
import org.json.JSONObject; 

public class JSONObjectConverter { 

    public static void main(String[] args) throws Exception { 

     String xml = FileUtils.readFileToString(new File("src/main/resources/staff.xml")); 
     JSONObject aJson = XML.toJSONObject(xml); 
     System.out.println(aJson.toString()); 

    } 

} 

어떤 제안?

+0

내 대답을보고 알려주실 수 있습니까? – developer

답변

2

xml 내용을 자바 객체로 비 정렬 화 한 다음 해당 자바 객체를 사용하여 JSON을 준비해야 JAXB를 사용해야합니다.

JAXB는 주어진 자바 객체로 XML (이것은 비 정렬 화라고합니다)와 그 자바 객체는 JSON을 형성하는 데 사용할 수있는 변환

당신은 아래의 코드를 참조 할 수 있습니다 :

public class JAXBToJsonConverter { 
    public static void main(String[] args) { 
     try { 
      //save the company details content to a .xml file 
      // and refer the path below 
      File file = new File("C:\\myproject\\company.xml"); 

      //create the jaxb context and unmarshall 
      JAXBContext jaxbContext = JAXBContext.newInstance(Company.class); 

      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      Company company= (Company) jaxbUnmarshaller.unmarshal(file); 

      //create the JSON object 
      JSONObject json = new JSONObject(company); 
      System.out.println(json); 
      } catch (JAXBException e) { 
      e.printStackTrace(); 
      } 
    } 
    } 

회사 클래스 :

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Company { 

    private Staff staff; 

    @XmlElement 
    public Staff getStaff() { 
     return staff; 
    } 

    public void setStaff(Staff staff) { 
     this.staff = staff; 
    } 
    } 

직원 클래스 :

public class Staff { 
    private String firstname; 
    private String lastname; 

    @XmlElement 
    public String getFirstname() { 
     return firstname; 
    } 
    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    @XmlElement 
    public String getLastname() { 
     return lastname; 
    } 
    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 
} 

세부 클래스 : 내 XML 다른 구조마다 때문에

public class Details { private String lastname; private String nickname; private int salary; @XmlElement public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } @XmlElement public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } @XmlElement public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } } 

내가 더 역동적 인 무언가가 필요합니다.

는 현재 staxon를 사용하는 모습을 가질 수 있습니다

https://github.com/beckchr/staxon/wiki/Converting-XML-to-JSON

+0

필자는 내 XML이 매번 다른 구조에 있기 때문에 더욱 동적 인 것이 필요하다. 클래스를 만들 필요없이'XML.toJSONObject (xml) '와 같은 좀 더 일반적인 것을 찾고있다. – dina

+0

확인. 나는 모양을 가질 것이다. 도와 주셔서 감사합니다! – dina

1

변환하기 전에 원하는 형태로 XML을 얻기 위해 XSLT 변환을 수행하십시오. (XSLT 3.0 xml-to-json() 함수 사용을 고려해 볼 수도 있습니다).

모든 범용 변환기는 사전 처리 또는 사후 처리없이 원하는대로 정확하게 처리 할 수 ​​있다고 생각합니다.

관련 문제