2013-07-15 2 views
1

Я создал следующий XML, используя классы JAXB, созданные из XSD. Теперь я хочу использовать их для анализа XML. Элементы XML Screens, DBSession и CLISession являются необязательными и могут быть использованы в любом порядке.Анализ XML с использованием JAXB

<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; 
} 

У меня есть следующие классы Java, который содержит методы для получения значений атрибутов.

ScreenType.java 
CLISissionType.java 
DBSessionType.java 

Используя приведенный ниже код я пытаюсь разобрать XML и я в состоянии идентифицировать элементы cliSession, DBSession и Screens и их порядок, но я не могу получить ручку на им, чтобы вызвать необходимые методы классы 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(); 
} 

Аналогично вы можете вызвать другие, проверяя их типы и литья их подходящими Класс и, наконец, вызов ваших желаемых методов.

Смежные вопросы