java - 使用 Unmarshal 访问 XML 文档的特定部分

标签 java xml jaxb unmarshalling

我有一个 XML 文档,其中包含一些配置信息,我必须从 java 类访问这些信息。我可以使用 java 解码来访问该信息,但问题是我无法访问 xml 的特定部分文件。每次访问信息时,我都必须先获取根标签,即我只能访问根标签元素,但我需要访问另一部分中的标签。这是我的 XML 文件

<?xml version="1.0" encoding="UTF-8"?>
<adapter  name="Hua_GPRS_CS5_4.7"  type="ASN.1"  version="1.0"  description="Huawie GPRS Output CDR Version 4.7"
      execclass="hua.gprs.HuaGPRSFileExecutor" parallel="1" mode="server" statusfile="HuaGPRSStatus.csv" merge_factor="1" active="true">

<dirconfig>
    <Poll protocol="" host="" path="./data/huagprs/source" pwd="" user="" clogging="true" startdir="" enddir=""
     pattern="(.*)\.(\d{6})(\d{6})(\d{4})_(.*)" metafields="fileName,exchange,fileDate,fileTime,fileSeq,junk"/>
    <Source path="./data/huagprs/source" clogging="false"/>
    <Backup path="./data/huagprs/backup" active="false"/>
    <Staging path="./data/huagprs/staging" clogging="false"/>
    <Output path="./data/huagprs/output" clogging="false" compress="gz"/>
    <Error  path="./data/huagprs/error" clogging="true"/>
    <Target protocol="" host="" path="/" pwd="" user="" active="true"/>
</dirconfig>
<dbConf id="1" name ="jjj" drivername="oracle.jdbc.driver.OracleDriver" hostname="localhost" portname="1521" dbname="rrr" servicename="orcl" user="param" password="param" sid="orcl">
    <TableConfig ID= "1" TableName="">
    </TableConfig>
 </dbConf>
</adapter>

我只能访问适配器标签的元素。但是我需要使用dbconf..这里我发布了我用来获取适配器标签的值的类es。模型类

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Adapter {

String name;
String type;
String version;
String description;
String execclass;
String parallel;
String mode;
String statusfile;
String merge_factor;
String active;
String drivername;

public String getDrivername() {
    return drivername;
}
@XmlAttribute
public void setDrivername(String drivername) {
    this.drivername = drivername;
}
public String getName() {
    return name;
}
@XmlAttribute
public void setName(String name) {
    this.name = name;
}
public String getType() {
    return type;
}
@XmlAttribute
public void setType(String type) {
    this.type = type;
}
public String getVersion() {
    return version;
}
@XmlAttribute
public void setVersion(String version) {
    this.version = version;
}
public String getDescription() {
    return description;
}
@XmlAttribute
public void setDescription(String description) {
    this.description = description;
}
public String getExecclass() {
    return execclass;
}
@XmlAttribute
public void setExecclass(String execclass) {
    this.execclass = execclass;
}
public String getParallel() {
    return parallel;
}
@XmlAttribute
public void setParallel(String parallel) {
    this.parallel = parallel;
}
public String getMode() {
    return mode;
}
@XmlAttribute
public void setMode(String mode) {
    this.mode = mode;
}
public String getStatusfile() {
    return statusfile;
}
@XmlAttribute
public void setStatusfile(String statusfile) {
    this.statusfile = statusfile;
}
public String getMerge_factor() {
    return merge_factor;
}
@XmlAttribute
public void setMerge_factor(String merge_factor) {
    this.merge_factor = merge_factor;
}
public String getActive() {
    return active;
}
@XmlAttribute
public void setActive(String active) {
    this.active = active;
    }

}

获取值的主类

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;


public class ReadXML {

/**
 * @param args
 */
public static void main(String[] args) {
    try {

        File file = new File("./file/config.ds");

        JAXBContext jaxbContext2 = JAXBContext.newInstance(Adapter.class);


        Unmarshaller jaxbUnmarshaller2 = jaxbContext2.createUnmarshaller();

        Adapter db2 = (Adapter) jaxbUnmarshaller2.unmarshal(file);

        System.out.println(db2.active);





          } catch (JAXBException e) {
        e.printStackTrace();
          }

    }

}

最佳答案

您可以使用 StAX XMLStreamReader 来高级解析 XML 文档。然后前进到要解码的 XML 元素。然后使用以 XMLStreamReader 作为参数的 unmarshal 方法。

关于java - 使用 Unmarshal 访问 XML 文档的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257329/

相关文章:

java - 使用 DatagramPacket 发送 0x04 - 类似于十六进制 char[] 数据

java - 在 Linux 上捕获虚拟打印机输出

xml - Docbook XML 到 PDF,没有 'ő' 和 'ű' 字符

xml - 使用 IXMLDocument 在 XML 中搜索数据

c# - 生成 xml 日志的日志记录组件

java - 将 Java 转换为 XSD 的用例与使用 JAXB 将 XSD 转换为 java 的用例是否不同?

java - 带参数的接口(interface)

java - Logback SMTPAppender 在特定时间只发送一封电子邮件,但有所有异常(exception)情况

java - IIB - 从聚合消息中获取 DOM 节点

javascript - 在 jquery 中访问 Spring MVC 模型对象