首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从jaxb生成的xml中删除standalone="yes“

从jaxb生成的xml中删除standalone="yes“
EN

Stack Overflow用户
提问于 2013-01-04 14:54:37
回答 2查看 18.2K关注 0票数 9
代码语言:javascript
运行
复制
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,我得到的输出如下。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

在这里,我想删除standalone="yes“,并希望输出为

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="ISO-8859-1"?>

我检查了链接Remove 'standalone="yes"' from generated XML,但此处的答案是删除完成

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

零件

我不想这样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-04 19:33:22

在你的问题中有几个问题需要解决:

问题#1 -编码

设置时,"jaxb.encoding"属性将直接影响输出为OutputStream时的编码。如果您使用的输出(比如Writer)负责处理它自己的编码,那么您需要确保将其作为Writer的一部分进行处理。

有关详细信息的,请访问

  • http://blog.bdoughan.com/2011/08/jaxb-and-java-io-files-streams-readers.html

问题#2 - standalone="yes"

您可以创建一个StAX (JSR-173) XMLStreamWriter来包装您的StringWriter输出,并对其进行编组。

代码语言:javascript
运行
复制
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;
    }

}

输出

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="ISO-8859-1"?><login></login>

替代方法

注意:我是的负责人,也是专家组的成员。

还有其他JAXB (JSR-222)提供程序,比如MOXy,它们不会将standalone="yes"作为您可以使用的输出的一部分输出。

  • http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html
票数 8
EN

Stack Overflow用户

发布于 2021-06-16 20:23:09

我为这个问题找到了一个简单的解决方案。通过以下方式禁用自动生成的标题:

代码语言:javascript
运行
复制
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);

这将禁用自动生成的header,现在我们可以像这样添加我们的自定义header:

代码语言:javascript
运行
复制
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");

整个代码看起来是这样的:

代码语言:javascript
运行
复制
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14152523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档