java - 使用 JAXB 解析 XML

标签 java xml xml-parsing jaxb

我使用从 XSD 创建的 JAXB 类创建了以下 XML。我现在想用它们来解析 XML。 XML 元素 ScreensDBSessionCLISession 是可选的,可以按任何顺序使用。

<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,并能够识别元素 cliSessionDBSessionScreens 及其顺序,但我无法处理 它们调用类 ScreenType.javaCLISissionType.javaDBSessionType.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

最佳答案

试试这个:

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

类似地,您可以通过检查其他人的类型并将它们转换为合适的类来调用其他人,最后调用您想要的方法。

关于java - 使用 JAXB 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17663517/

相关文章:

java - Netbeans 上的 CDI @Target 警告消息

java - 在 Tomcat 中托管 Netty 服务器是否可行/可取?

xml - 寻找 "CC130"的 XPath 函数

windows-phone-7 - WP7 中的 Rea XML 文件

javascript - xml2json 从数组返回 1 个对象

java - 哈希表自己实现中的负载因子

c# - 使用 XElement 作为模板将 DataTable 转换为 XML

c# - 检查 XML 中是否存在元素

java - 从 XML 文档中删除节点

java - 阻塞锁与非阻塞锁