public final String getMessage() {
JAXBContext jaxbContext;
StringWriter sw = new StringWriter();
try {
jaxbContext = JAXBContext.newInstance(Login.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1");
jaxbMarshaller.marshal(this, sw);
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sw.toString();
}
这是代码what I'm using..and,我得到的输出如下。
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
在这里,我想删除standalone="yes“,并希望输出为
<?xml version="1.0" encoding="ISO-8859-1"?>
我检查了链接Remove 'standalone="yes"' from generated XML,但此处的答案是删除完成
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
零件
我不想这样。
发布于 2013-01-04 19:33:22
在你的问题中有几个问题需要解决:
问题#1 -编码
设置时,"jaxb.encoding"
属性将直接影响输出为OutputStream
时的编码。如果您使用的输出(比如Writer
)负责处理它自己的编码,那么您需要确保将其作为Writer
的一部分进行处理。
有关详细信息的,请访问
问题#2 - standalone="yes"
您可以创建一个StAX (JSR-173) XMLStreamWriter
来包装您的StringWriter
输出,并对其进行编组。
import java.io.*;
import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.stream.*;
@XmlRootElement
public class Login {
private JAXBContext jaxbContext;
private XMLOutputFactory xmlOutputFactory;
public Login() {
try {
jaxbContext = JAXBContext.newInstance(Login.class);
xmlOutputFactory = XMLOutputFactory.newFactory();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Login demo = new Login();
System.out.println(demo.getMessage());
}
public final String getMessage() {
try {
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1");
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(baos, (String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING));
xmlStreamWriter.writeStartDocument((String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING), "1.0");
jaxbMarshaller.marshal(this, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();
xmlStreamWriter.close();
return new String(baos.toByteArray());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
输出
<?xml version="1.0" encoding="ISO-8859-1"?><login></login>
替代方法
注意:我是的负责人,也是专家组的成员。
还有其他JAXB (JSR-222)提供程序,比如MOXy,它们不会将standalone="yes"
作为您可以使用的输出的一部分输出。
发布于 2021-06-16 20:23:09
我为这个问题找到了一个简单的解决方案。通过以下方式禁用自动生成的标题:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
这将禁用自动生成的header,现在我们可以像这样添加我们的自定义header:
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
整个代码看起来是这样的:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
https://stackoverflow.com/questions/14152523
复制相似问题