有没有简单的方法来处理这种情况?

时间:2018-03-22 07:29:42

标签: java xml

我正在寻找一个更简单的解决方案。

工具A

它将处理以下格式的XML

<xml>
     <subtag1></subtag1>
         <subtag1A></subtag1A>
     <subtag2></subtag2>
     <subtag3></subtag3>
</xml>

工具B

它将处理以下格式的XML

<xml>
     <subtag1></subtag1>
         <toolBsubtag1A></toolBsubtag1A>
     <subtag2></subtag2>
     <toolBsubtag3></toolBsubtag3>
</xml>

我必须处理两个XML是同一个工具。

XML明智的区别只是标签名称很少。

在java中我可以解析它并使用逻辑来区分它。

但有没有简单的方法呢?有没有解析器呢?有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:0)

您可以创建类Tool并将xml解析为它。空标签将为空

@XmlRootElement
public class Tool {
    String subtag1;
    String subtag2;
    String subtag3;
    String subtag1A;
    String toolBsubtag1A;

    @XmlElement
    public void setSubtag1(String tag) {
        this.subtag1 = tag;
    }

    @XmlElement
    public void setSubtag1A(String tag) {
        this.subtag1A = tag;
    }

    //...
}

JAXBContext jaxbContext = JAXBContext.newInstance(Tool.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Tool tool = (Tool)jaxbUnmarshaller.unmarshal(new File("C:\\file.xml"));

答案 1 :(得分:0)

您可以创建一个抽象的JAXB类,并在实际创建XML时创建正确的子类型。

这样的东西
@XmlRootElement(name="xml")
abstract class AbstractData {
    // add properties with common element names here
    @XmlElement(name="subtag1")
    private String subtag1;
    public void setSubtag1(String setTo) { subtag1 = setTo; }
    public String getSubtag1() { return subtag1; }

    // and keep the others abstract
    public abstract void setSubtag1a(String setTo);
    public abstract String getSubtag1a();
}

然后为适当的工具创建子类

public class ToolAData extends AbstractData {
    @XmlElement(name="subtag1A")
    private String subtag1a;
    public void setSubtag1a(String setTo) { subtag1a = setTo; }
    public String getSubtag1a() { return subtag1a; }
}

public class ToolBData extends AbstractData {
    @XmlElement(name="toolBsubtag1A")
    private String subtag1;
    public void setSubtag1(String setTo) { subtag1 = setTo; }
    public String getSubtag1() { return subtag1; }
}

然后,在创建输出数据时,只需创建正确的子类。

AbstractData data = toolA ? new ToolAData() : new ToolBData();
data.setSubtag1("subtag1data");
data.setSubtab1a("subtag1adata");

并编组文件。