如何以编程方式从Java创建XML?

时间:2015-03-31 15:52:47

标签: java xml jaxb

我正在尝试使用Java中的JAXB以编程方式创建XML元素。这可能吗?我正在阅读本页here以了解我可以使用的内容,但迄今为止一无所获。

通常从定义bean

开始
@XmlRootElement public class MyXML { 
  private String name;
  public String getName() {  return name; }
  @XmlElement public void setName(String s) { this.name = s; }
}

并使用

之类的代码对其进行序列化
public class Serializer { 
  static public void main(String[] args) { 
     MyXML m = new MyXML();
     m.setName("Yo");
     JAXBContext jaxbContext = JAXBContext.newInstance(MyXML.class);
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
     jaxbMarshaller.marshal(m, new File("MyXML_"+ ".xml"));
  }
}

可以产生以下XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myXML>
    <name>Yo</name>
</myXML>

如何根据程序中输入的内容对Java类进行编程以创建元素标记名称?例如,在我的示例中,tag元素称为“name”。我怎么能在运行时设置它?这可能是泛型还是其他方式?

2 个答案:

答案 0 :(得分:1)

JAXB中的B代表 Bean 所以不,没有定义bean就无法使用JAXB。

您只是想以动态方式创建XML,所以请查看jOOX例如link to full Gist

Document document = JOOX.builder().newDocument();
Element root = document.createElement("contacts");
document.appendChild(root);

for (String name : new String[]{"John", "Jessica", "Peter"}) {
  $(root).append(
    $("contact"
      , $("name", name)
      , $("active", "true")
    )
  );
}

答案 1 :(得分:0)

这里,你在编译时使用注释,而你还不知道你需要的格式。编排这种方式与序列化没有什么不同,它基本上将java对象的字段直接映射到XML表示 - &gt; (如果对象中没有定义某些内容,则它不会出现在表示中)。 你喜欢做什么看起来像简单的xml制作(XML解析器足够S(t)AX / DOM无论如何 - 我喜欢杰克逊)。

为了好奇,如果你真的想摆弄注释,你可以使用the answer you will find here

的一些反思。