2012-03-11 4 views
4

다음 특성을 가진 XML 태그가 있습니다. 런타임에 XML을 얻고 태그 이름을 알고 있기 때문에 속성의 수/이름이 제공되지 않습니다. JAXB를 사용하여 모든 속성을 Map<String, String>으로 가져 오려면 어떻게해야합니까?Jaxb의 요소에 동적 속성 가져 오기

어떻게 다음과 같은 자바 코드에이를 추가 할 수 있습니다

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

@XmlRootElement(name = "script ") 
@XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD) 
public class SearchScriptElement 
{ 

    @XmlAttribute(name = "script") 
    private String script = ""; 

    public String getScript() 
    { 
     return name; 
    } 

    public void setScript(String name) 
    { 
     this.name = name; 
    } 
} 

XML 예제 : 나는 런타임에 알려지지 않은 많은 속성을 가질 수있다 :

<ScriptList> 
    <script name="xxx" value="sss" id=100 > 
    <script> 
    <script name="xxx" value="sss" id=100 alias="sss"> 
    <script> 
</ScriptList> 
+0

XML 예제를 게시하십시오. 이것은 정확하게 당신의 질문을 이해하는 데 도움이됩니다. – AlexR

+0

XML이 주 스레드에 추가되었습니다. – user1205079

+0

그 질문은 이미 여러 번 요청되었습니다. XML 구조가 다양하다면 유일한 해결책은'@XmlAnyElement'입니다. [JAXB 요소의 모든 내용 가져 오기] (http://stackoverflow.com/questions/7736678), [JAXB - XML ​​문자열 속성을 사용하는 마샬링 객체] (http://stackoverflow.com/questions/1958645)를 참조하십시오. –

답변

0

2 클래스 만들기 ScriptListScript :

@XmlType(name = "ScriptList") 
public class ScriptList { 
    private Collection<Script> scripts; 

    @XmlElement(name = "location") 
    public Collection<Script> getSripts() { 
     return scripts; 
    } 
} 

@XmlType(name = "script") 
public class Script { 
    private String name; 
    private String value; 
    private String id; 
    private String alias; 

    @XmlAttribute(name="name") 
    public String getName() { 
     return name; 
    } 
    // add similar getters for value, id, alias. 
    // add setters for all fields. 
} 

나는 그게 전부라고 믿는다. 적어도 이것이 당신의 출발점이 될 수 있습니다.

+0

안녕 답장을 보내 주셔서 감사합니다, 그 문제는 내가 코딩하지 않는 동안 xml 요소의 속성을 알고 있으므로 런타임에 속성의 이름을 알 필요가 없으면 묻습니다. – user1205079

5

당신은 할 수 있습니다 :

@XmlAnyAttribute 
private Map<QName, String> attributes; 

거의 Map<String, String> 것은 당신이 원하는 그.

+0

고맙습니다. 잘 작동합니다. – user1205079

+1

@ user1205079 답변을 수락 해주십시오. :) – lexicore