2011-08-25 3 views
1

이러한 요구 사항을 충족하는 Java로 XML 작업을하는 솔루션을 아는 사람이 있습니까?Java에서 XML 작업 : 유창한 XSD 및 구문 분석 필요 없음

  • 유창 자바 표준 타입 통해 XML 데이터로 작업 할 수
  • 능력 (아무 XSD와) XML 스키마를 정의 할 수있는 기능 :이 태그의 속성은 정수라고 말한다면, 나는 싶습니다을 int으로 읽고 쓰고 파싱하지 않고 수동으로 문자열로 변환 할 수 있습니다.

이상적인 솔루션은 다음과 같이이다 :

class MyXmlData { 
    @Bind("...xpath here...", Bind.Required) 
    public Integer numberOfPersons; // required, integer 

    @Bind("...xpath here...") 
    public String title; // optional 
} 

try { // throws, if required fields are not present 
    MyXmlData data = MagicXml.read(MyXmlData.class, "1.xml"); 

    // at this point data.numberOfPersons is never null and 
    // title may be null 

    int myNumOfPersons = data.numberOfPersons; // here we go 
} 
+0

여기에서 원하는 것을 이해하는 것이 어렵습니다. "유창하게"무엇을 의미합니까? "해석 할 필요가 없다"는 것은 무엇을 의미합니까? 스키마를 원하면 XSD를 사용해야합니다. xml을 처리하려면 라이브러리를 사용하여 xml을 구문 분석해야합니다. – Arafangion

+1

당신이 사용하고있는 용어에 약간 혼란 스럽습니다. _fluently_ XSD를 정의 하시겠습니까? _ 해석 할 필요가 없습니다 _? 그 외에도 제 첫인상은 JAXB로가는 것입니다. (편집 : @Arafangion 당신도 이상한 용어를 보았습니다 :-) – Wivani

+0

* 유창하게 * 유창한 NHibernate *에서와 같이 * 유창한 인터페이스 *에 대해 읽어야합니다. – agibalov

답변

2

체크 아웃 EclipseLink JAXB (MOXy)을 참조하십시오. 우리 @XmlPath 주석 당신이 찾고있는 그 @Bind 주석과 유사 자세한 내용

package blog.geocode; 

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

import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement(name="kml") 
@XmlType(propOrder={"country", "state", "city", "street", "postalCode"}) 
public class Address { 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()") 
    private String street; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:LocalityName/text()") 
    private String city; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()") 
    private String state; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()") 
    private String country; 

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()") 
    private String postalCode; 

} 

+1

젠장,이 질문을 빨리 보았어 야합니다. Doughan이 MOXy : D를 제안하는 데 걸린 시간을 알고 싶습니다. D는 묻는 사람에게 가장 적합합니다. –

+0

@Blise Doughan : 감사합니다. 또 다른 질문은 다음과 같습니다. -이 필드를 선택/필수로 표시하려면 어떻게합니까? 문제는 빈 xml 태그가 int의 경우 0으로 처리되고 문자열의 경우 빈 문자열로 처리된다는 것입니다. 일부 태그가 비어 있지 않도록하려면 어떻게해야합니까? – agibalov

+0

@ loki2302 - http://stackoverflow.com/questions/7192619/how-do-i-mark-fields-as-required-optional-when-reading-xml-with-moxy/7193342#7193342를 참조하십시오. –