我正在寻找一个更简单的解决方案。
有工具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中我可以解析它并使用逻辑来区分它。
但有没有简单的方法呢?有没有解析器呢?有没有更简单的方法呢?
答案 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");
并编组文件。