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

How do I programmatically create XML from Java?

我正在尝试在 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 class 以根据程序中输入的内容创建元素标签名称?例如,在我的示例中,标记元素称为 'name'。我怎么能在运行时设置它呢?这可以通过泛型或其他方式实现吗?

JAXB 中的 B 代表 Bean 所以不,如果不定义 beans 就无法使用 JAXB。

你只是想动态地创建一个 XML 所以看看 jOOX for example (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")
    )
  );
}

在这里,你在编译时之前使用注释,而你还不知道你需要的格式。这种方式的编组与序列化没有什么不同,它基本上直接映射 java 对象到 XML 表示 --> (如果对象中没有定义某些东西,它就不会出现在表示中)。 你想做的事情看起来很简单 xml 制作(一个 XML 解析器就足够了 S(t)AX/DOM 无论如何——我喜欢 Jackson)。

出于好奇,如果你真的想 fiddle 带注释,你可以结合 the answer you will find here

使用一些反射