Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB马歇尔压痕_Java_Xml_Jaxb_Marshalling - Fatal编程技术网

Java JAXB马歇尔压痕

Java JAXB马歇尔压痕,java,xml,jaxb,marshalling,Java,Xml,Jaxb,Marshalling,我正在使用JAXB marshaller创建和格式化.xml文件。除了一个地方外,它运行得很好。缩进缺少两个位置: <Elem1> <Elem2> <Elem3 ID="Elem3.INFO"> <Elem4>INFO</Elem4> </Elem3>

我正在使用JAXB marshaller创建和格式化.xml文件。除了一个地方外,它运行得很好。缩进缺少两个位置:

                <Elem1>
                    <Elem2>
                        <Elem3 ID="Elem3.INFO">
<Elem4>INFO</Elem4>
                        </Elem3>
                        <Elem2>
                            <Elem3 ID="Elem3.TEMPLATE">
<Elem4>TEMPLATE</Elem4>
                            </Elem3>
                        </Elem2>
                        <Elem2>
                            <Elem3 ID="Elem3.LEVEL">
<Elem4>LEVEL</Elem4>
                            </Elem3>
                        </Elem2>
                    </Elem2>
                </Elem1>
不幸的是,它对这两个元素不起作用。
有什么想法吗?

在JAXB错误中,最多有8级缩进是硬编码的:

IndentingUTF8XmlOutput.java:

    private void printIndent() throws IOException {
        write('\n');
        int i = depth%8;
        write( indent8.buf, 0, i*unitLen );
        i>>=3;  // really i /= 8;
        for( ; i>0; i-- )
            indent8.write(this);
    }

来源:

在JAXB错误中,最多有8级缩进是硬编码的:

IndentingUTF8XmlOutput.java:

    private void printIndent() throws IOException {
        write('\n');
        int i = depth%8;
        write( indent8.buf, 0, i*unitLen );
        i>>=3;  // really i /= 8;
        for( ; i>0; i-- )
            indent8.write(this);
    }

来源:

这个恼人的问题可以通过在输出中应用javax Transformer来解决

import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.StreamResult;

Object jaxbElement = // The object you want to marshall using jaxb.

JAXBContext context = JAXBContext.newInstance(jaxbElement.getClass());
Marshaller marshaller = context.createMarshaller();
OutputStream out = // Here your destination, FileOutStream, ByteOutStream etc
DOMResult domResult = new DOMResult();
marshaller.marshal(jaxbElement, domResult);

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(new DOMSource(domResult.getNode()), new StreamResult(out));

通过将javax Transformer应用于输出,可以解决这个恼人的问题

import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.StreamResult;

Object jaxbElement = // The object you want to marshall using jaxb.

JAXBContext context = JAXBContext.newInstance(jaxbElement.getClass());
Marshaller marshaller = context.createMarshaller();
OutputStream out = // Here your destination, FileOutStream, ByteOutStream etc
DOMResult domResult = new DOMResult();
marshaller.marshal(jaxbElement, domResult);

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(new DOMSource(domResult.getNode()), new StreamResult(out));

玛丽亚·桑切斯,这对我的案子不起作用。我得到了这个错误:NAMESPACE\u ERR:试图创建或更改一个对象,但在名称空间方面是不正确的。我发现了一些修复方法。。。你可以在这里说:玛丽亚·桑切斯,这对我的案子不起作用。我得到了这个错误:NAMESPACE\u ERR:试图创建或更改一个对象,但在名称空间方面是不正确的。我发现了一些修复方法。。。你可在此查阅: