2011-07-27 2 views
3

XML 파일을 구문 분석하기 위해 Simple XML Framework을 사용하고 있습니다. 내가 인터페이스 (또는 슈퍼 클래스) 객체과 두 개의 서브 클래스 B간단한 XML 프레임 워크로 상속

<Objects> 
    <Object type="A"> 
     <name></name> 
     <color></color> 
    </Object> 
    <Object type="B"> 
     <shape></shape> 
     <weight></weight> 
    </Object> 
<Objects> 

: 서버에서

i는 다음과 같습니다 무엇 XML 파일을받을 이 XML 문서를 비 직렬화 할 수 있습니까?

나는 거기에 클래스 -attribute과 서브 클래스를 구별 할 수있는 가능성이 있지만, 불행하게도이 나를 위해 불가능하다는 Tutorial에서 보았다. 프레임 워크가 type 속성의 기본에 맞는 하위 클래스를 선택했다는 것을 선택할 수있는 방법이 있습니까?

내가 안드로이드를 사용하기 때문에 당신이 당신의 XML 하나의 사소한 변경 사항을 기꺼이 너무 만약 내가 그렇게 할 수 ...

답변

1

간단한 XML을 (JAXB와 같은) 다른 프레임 워크를 사용할 수 없습니다.

<Objects> 
    <A> 
     <name></name> 
     <color></color> 
    </A> 
    <B> 
     <shape></shape> 
     <weight></weight> 
    </B> 
<Objects> 

을 그리고 당신은 다음과 같은 자바 수 : : 그래서 예를 들어, 당신은 다음과 같이 해당 XML을 바꿀 수

@ElementListUnion({ 
    @ElementList(entry = "A", inline = true, type = A.class), 
    @ElementList(entry = "B", inline = true, type = B.class) 
} 
private List<BaseClass> objects; 

을 그리고 정말에 있다는 것을 전부입니다. 나는 그것이 애트리뷰트를 기반으로 할 수 있다고 생각하지 않지만. 나는 틀릴 수 있었다, 당신은 저것을 위해 read the docs에 원할지도 모르다.

<Objects> 
    <Object class="ObjectA"> 
    <name></name> 
    <color></color> 
    </Object> 
    <Object class="ObjectB"> 
    <shape></shape> 
    <weight></weight> 
    </Object> 
<Objects> 

이유에 공급하기 전에, 정규 표현식을 사용하여 클래스와 type="A"type="B" 속성을 대체 : 당신과 같이, 클래스 속성을 사용할 수없는 경우

0

이해야 할 까다로운 일이 될 것이다 간단한 XML 디시리얼라이저? 예를 들어 :

xml = xml.replaceAll("type=\"([A-Za-z0-9_]+)\", "class=\"$1\""); 

나는 그런이 하나 다형성 목록에서 특정 클래스의 유형을 표시하는 속성 xsi:type을 사용하여 .NET의 XML 시리얼 라이저에 의해 생성이 트릭 구문 분석 XML을 사용할 수 있었다.