2011-12-01 4 views
2

몇 가지 Java 클래스에서 XML을 생성하기 위해 XStream을 사용하고 일부 요소에 대해 네임 스페이스 한정 속성을 지정해야합니다. 즉 xml : id 및 xlink : href 속성을 사용합니다.XStream의 네임 스페이스 한정 속성

StaxDriver를 사용하고 있는데 QNameMap을 사용하여 요소에 대한 네임 스페이스를 구성 할 수 있습니다. 솔루션을 찾을 수없는 특성의 네임 스페이스 일뿐입니다. 기본적으로

, 나는 수업을

@XStreamAlias("someElement") 
public class SomeElement 
{   
    @XStreamAsAttribute 
    String id = "foo"; 
    @XStreamAsAttribute 
    String href = "http://bar" 
} 

을 가지고에 나는이 직렬화해야합니다

<someElement xml:id="foo" xlink:href="http://bar"/> 

이 문제를 복잡하게하기 위해 나는 'ID'라는 이름의 속성은 "이 될 것을 가정 할 수 없다 xml : id "또는 'href'라는 속성이 'xlink : href'가되어야합니다.

답변

7

인터넷 검색을 한 번 더 해본 결과 나는 대답을 찾은 것으로 생각하고 해결책은 생각보다 간단하다고 생각합니다.

나는 너무 영리하여 일부 구성 요소를 "네임 스페이스를 인식"하게 만드는 방법을 찾고 있었고, 그로 인해 잃어버린 배틀이되었습니다. 내가 찾은 해결책은 StaxDriver와 QNameMaps를 잊어 버리고 필요한 네임 스페이스 속성을 생성하기 위해 @XStreamAsAttribute 및 @XStreamAlias로 필드를 간단히 마사지하는 것이 었습니다. I.E.

@XStreamAlias("root") 
class RootElement 
{ 
    @XStreamAsAttribute 
    final String xmlns = "http://www.example.org" 

    @XStreamAsAttribute 
    @XStreamAlias("xmlns:xlink") 
    final String xlink="http://www.w3.org/1999/xlink" 

    SomeElement someElement 
} 

class SomeElement 
{ 
    @XStreamAsAttribute 
    @XStreamAlias("xml:id") 
    String id 

    @XStreamAsAttribute 
    @XStreamAlias("xlink:href") 
    String href 
} 
내가 원하는 XML을 얻을 위의와

: 그것에 대해 이동하는 가장 좋은, 또는 적절한, 방법이 아니다 가능성이

<root xmlns="http://www.example.org" xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <someElement xml:id="p1" xlink:href="http://www.example.org"/> 
</root> 

하지만 내가 지금 필요하지 않습니다.

관련 문제