使用自定义名称空间在Java中创建XML字符串

杰伊·莎(Jay Shah):

我想以编程方式在Java中生成xml字符串,其名称空间是自定义的,如下所示,并且所有数据都必须动态添加到xml中。如何实现这样的功能?

<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>示例代码中提到的开始和结束标记以及名称空间作为输出

Andrewjames:

这是一种方法:

首先,这是我的类,表示所需的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类嵌套在根类中-仅用于此测试。当然,还有其他安排这些类的方法,因此它们不是嵌套的。

然后我将package-infofor 定义org.ajames.jaxb.persons如下:

@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);

假设我们为此测试将XML写入Java String,JAXB上下文和编组器如下所示:

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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用sed自定义字符串空间

在Python中创建自定义字符串类型

通过Maven pom.xml在Java清单'Classpath'中添加自定义字符串

我如何使用自定义模式在java中拆分字符串

如何删除默认名称空间并使用C#在xml的根标记中添加自定义名称空间?

Java的:如何创建一个基于自定义对象的ArrayList排序的字符串ArrayList中不使用排序()

通过多个属性从自定义对象数组中获取名称字符串

尝试使用 JsonStringEnumConverter 将枚举转换为自定义字符串名称

创建自定义“字符串”(结构)副本

如何从自定义格式的字符串创建JSON

循环创建自定义字符串

如何迭代 for 循环并创建自定义字符串

从自定义集合创建逗号分隔的字符串

从自定义标签创建字符串

高效的自定义字符串创建器

从字符串创建自定义RSA密钥

Android:如何在自定义首选项的属性中使用xml文件中的字符串资源?

使用自定义字符串定义符号变量

PHP解析字符串中的自定义字符

如果单元格中的字符串包含X,则创建自定义维度

根据javascript中的字符串创建自定义配色方案

在C ++中为字符串创建自定义函数

如何在Laravel中为字符串字段创建自定义自动增量

如何使用自定义创建的字符串原型方法?

使用字符串值为数字操作数创建自定义谓词

在MySQL中使用自定义字符串创建别名列

在Golang中解码XML时自定义字符串翻译

自定义XML资源中的参考字符串资源

Android:如何在自定义类中从strings.xml访问字符串数组?