1

我正在寻找可以轻松创建对象以访问大型 XML 文件的东西。

XML 文件如下所示:

<?xml version="1.0" encoding="WINDOWS-1252"?>
    <vzg:vzg erstellt_von="##" erstellt_am="###" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vzg="###" xsi:schemaLocation="###">
      <auswahl sicht="B" basisfplp_id="0" basisve_id="0">
        <fplp vzg_id="0" periode="2012/2013"/>
        <version vzg_id="###" name="###"/>
        <strecke name="11801">
          <von baukms_nr="###" km="#.#"/>
          <bis baukms_nr="###" km="#.#"/>
        </strecke>
        <bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
        <bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
        <bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
        <bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
        <bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
        ...

我想要一个对象来计算一些 XML 属性。

像:

列表 vzg_id=vzg.auswahl.bst;

int res=vzg_id.get(3) * vzg.auswahl.strecke.von.baukms_nr;

由于 XML 有大约 16000 行,因此很难为每个 XMLElement 创建一个类。

我现在所做的:

主类

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import java.io.File;

import javax.xml.bind.JAXB;

public class Main
{
    public static void main(String[] args)
    {
        VZG vzg = JAXB.unmarshal(new File("./XMLVZG.xml"), VZG.class);


        System.out.println(vzg.erstellt_am+ " "+vzg.erstellt_von+"\n"+vzg.aw.sicht);
    }
}

VZG级

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class VZG
{
    @XmlElement(name="auswahl")
    AuswahlSicht aw;
    @XmlAttribute(name="erstellt_von")
    String erstellt_von;
    @XmlAttribute(name="erstellt_am")
    String erstellt_am;
    @XmlAttribute(name="xsi")
    String xmlns_xsi;   
}

类奥斯瓦尔

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="auswahl")
public class AuswahlSicht
{
    @XmlAttribute(name="basisfplp_id")
    int basisfplp_id;
    @XmlAttribute(name="basisve_id")
    int basisve_id;
    @XmlAttribute(name="sicht")
    String sicht;

}

因此,我现在能够获取 Root 和 Cild 的属性,但我仍然有大约 1000 个具有属性的孩子,我正在寻找一种自动解析 XML 以获取对象的方法。简单描述:XML 文件

<root>
 <child>
   <Subchild id="1"/>
    <subsubchild id=2/>
    <subsubchild id=33/>
 </child>
</root>

对象应该是这样的:

列出 subsubchilds = root.child.subchild.subsubchild;int id_one=subsubchilds.get(0);

提前致谢

4

1 回答 1

3

为现有的 XML 手动编写 JAXB 类很少是一个好主意。JDK 具有特殊的命令行工具,可以从 XML 模式为您 (xjc) 生成这些类。如果架构不可用,您可以尝试从 XML 生成架构(各种工具都可以做到这一点 - 例如 XMLSpy),然后使用 xjc 生成类。

于 2012-11-06T16:19:58.193 回答