我使用从XSD创建的JAXB类创建了以下XML。我现在想用它们来解析XML。 XML元素Screens
,DBSession
和CLISession
是可选的,可以按任何顺序使用。
<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
的输出:
com.q1labs.qa.xmlgenerator.model.generatedxmlclasses.ScreensType@1a8b2725
com.q1labs.qa.xmlgenerator.model.generatedxmlclasses.DBSessionType@25b6fbc0
com.q1labs.qa.xmlgenerator.model.generatedxmlclasses.CLISessionType@104a0d98
com.q1labs.qa.xmlgenerator.model.generatedxmlclasses.ScreensType@6dc27e82
答案 0 :(得分:1)
试试这个:
if(testInfo.getCLISessionOrDBSessionOrScreens().get(i) instanceof ScreensType)
{
ScreensType screenTypeObj = (ScreensType) testInfo.getCLISessionOrDBSessionOrScreens().get(i);
screenTypeObj.callYourDesiredMethod();
}
同样,您可以通过检查其他类型并将其转换为合适的类并最终调用所需的方法来调用其他人。