2013-07-15 2 views
1

XSD에서 생성 된 JAXB 클래스를 사용하여 다음 XML을 만들었습니다. 이제 XML을 파싱하기 위해 그것들을 사용하려고합니다. XML 요소 , DBSessionCLISession은 선택 사항이며 임의의 순서로 사용할 수 있습니다.JAXB를 사용하여 XML 구문 분석

<Test> 
    <Screens> 
    <Screen attr1="qw" attr2="ds" attr3="sdf"></Screen> 
    </Screens> 
    <DBSession attr1="sd" attr2="sdf" attr3="sdf"></DBSession> 
    <CLISession attr1="sdf"></CLISession> 
    <Screens> 
    <Screen attr1="qdw" attr2="dss" attr3="a"></Screen> 
    </Screens> 
</Test> 

나는 다음과 같은 방법을 포함하는 파일 Test.java의 클래스가 있습니다

public List<Object> getCLISessionOrDBSessionOrScreens() { 
    if (cliSessionOrDBSessionOrScreens == null) { 
    cliSessionOrDBSessionOrScreens = new ArrayList<Object>(); 
    } 
    return this.cliSessionOrDBSessionOrScreens; 
} 

나는 또한 속성의 값을 얻을 방법을 포함하는 다음과 같은 자바 클래스가 있습니다. 나는 XML을 구문 분석을 시도하고 요소 cliSession, DBSessionScreens와 순서를 식별 할 수 있어요하지만 난에서 필요한 메소드를 호출 할 그들에 대한 핸들을 얻을 수 없습니다 생각하고 아래의 코드를 사용하여

ScreenType.java 
CLISissionType.java 
DBSessionType.java 

클래스 ScreenType.java, CLISissionType.java, DBSessionType.java. 이 코드를 편집하여 Java 파일의 메소드에 액세스하려면 어떻게해야합니까?

JAXBContext jaxbContext = JAXBContext.newInstance("com.qa.xmlgenerator.model.generatedxmlclasses"); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
StringReader reader = new StringReader(xml); 
JAXBElement<?> test = (JAXBElement<?>) unmarshaller.unmarshal(reader); 
Test testInfo = (Test) test.getValue(); 

int numComponents = testInfo.getCLISessionOrDBSessionOrScreens().size(); 
for(int i= 0; i<numComponents; i++){ 
    System.out.println(testInfo.getCLISessionOrDBSessionOrScreens().get(i)); 
} 

는 위의 코드에서 System.out.println의 출력입니다 :

c[email protected]1a8b2725 
com[email protected]25b6fbc0 
com.[email protected]104a0d98 
c[email protected]6dc27e82 

답변

1

보십시오이 : 마찬가지로

if(testInfo.getCLISessionOrDBSessionOrScreens().get(i) instanceof ScreensType) 
{ 
    ScreensType screenTypeObj = (ScreensType) testInfo.getCLISessionOrDBSessionOrScreens().get(i); 
    screenTypeObj.callYourDesiredMethod(); 
} 

당신이 자신의 유형을 확인하고 적절한로 변환하여 다른 사람을 호출 할 수 있습니다 클래스를 호출하고 마지막으로 원하는 메서드를 호출합니다.