使用自定义命名空间在 java 中创建 XML 字符串
Create XML string in java with custom namespace
我想以编程方式在 java 中生成 xml 字符串,其名称 space 是自定义的,如下所示
并且所有数据都必须动态地进入 xml.How 我可以实现这样的目标吗?
<faxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd">
<person>
<name>ABC</name>
</person>
</faxml>
我已经经历过这样的例子 https://howtodoinjava.com/jaxb/write-object-to-xml/ 但是这里 xml 生成它的起始行是
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
但我想要开始和结束标记 <faxml>
以及名称spaces,正如我在示例代码中提到的那样作为输出
String name= "name"
String createXml="<faxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//
xsi:noNamespaceSchemaLocation="test.xsd">"//
+"<person>"//
+"<name>"+name+"</name>"//
+"</>person">"//
+"</faxml>";
Sysout(createXml);
获取变量中的名称。硬编码这些行并像这样插入..
这是一种方法:
首先,这是我的 class 代表所需的 XML 数据:
package org.ajames.jaxb.persons;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "faxml")
public class Faxml {
private Person person;
public static class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
我选择将 Person
class 嵌套在根 class 中 - 仅用于此测试。当然,还有其他排列这些 class 的方法,因此它们不是嵌套的。
然后我为org.ajames.jaxb.persons
定义package-info
如下:
@XmlSchema(
namespace = "",
elementFormDefault = XmlNsForm.UNSET,
xmlns = {
@XmlNs(prefix = "", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")
})
package org.ajames.jaxb.persons;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
为了将数据从 Java 对象处理为 XML,我使用以下测试数据:
Faxml.Person person = new Faxml.Person();
person.setName("ABC");
Faxml faxml = new Faxml();
faxml.setPerson(person);
JAXB 上下文和编组器如下,假设我们将 XML 写入 Java 字符串,对于此测试:
JAXBContext jaxbContext = JAXBContext.newInstance(Faxml.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "test.xsd");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter stringWriter = new StringWriter();
marshaller.marshal(faxml, stringWriter);
String xml = stringWriter.toString();
System.out.println(xml);
结果XML是:
<faxml xsi:noNamespaceSchemaLocation="test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<person>
<name>ABC</name>
</person>
</faxml>
我想以编程方式在 java 中生成 xml 字符串,其名称 space 是自定义的,如下所示 并且所有数据都必须动态地进入 xml.How 我可以实现这样的目标吗?
<faxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd">
<person>
<name>ABC</name>
</person>
</faxml>
我已经经历过这样的例子 https://howtodoinjava.com/jaxb/write-object-to-xml/ 但是这里 xml 生成它的起始行是
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
但我想要开始和结束标记 <faxml>
以及名称spaces,正如我在示例代码中提到的那样作为输出
String name= "name"
String createXml="<faxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//
xsi:noNamespaceSchemaLocation="test.xsd">"//
+"<person>"//
+"<name>"+name+"</name>"//
+"</>person">"//
+"</faxml>";
Sysout(createXml);
获取变量中的名称。硬编码这些行并像这样插入..
这是一种方法:
首先,这是我的 class 代表所需的 XML 数据:
package org.ajames.jaxb.persons;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "faxml")
public class Faxml {
private Person person;
public static class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
我选择将 Person
class 嵌套在根 class 中 - 仅用于此测试。当然,还有其他排列这些 class 的方法,因此它们不是嵌套的。
然后我为org.ajames.jaxb.persons
定义package-info
如下:
@XmlSchema(
namespace = "",
elementFormDefault = XmlNsForm.UNSET,
xmlns = {
@XmlNs(prefix = "", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")
})
package org.ajames.jaxb.persons;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
为了将数据从 Java 对象处理为 XML,我使用以下测试数据:
Faxml.Person person = new Faxml.Person();
person.setName("ABC");
Faxml faxml = new Faxml();
faxml.setPerson(person);
JAXB 上下文和编组器如下,假设我们将 XML 写入 Java 字符串,对于此测试:
JAXBContext jaxbContext = JAXBContext.newInstance(Faxml.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "test.xsd");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter stringWriter = new StringWriter();
marshaller.marshal(faxml, stringWriter);
String xml = stringWriter.toString();
System.out.println(xml);
结果XML是:
<faxml xsi:noNamespaceSchemaLocation="test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<person>
<name>ABC</name>
</person>
</faxml>