使用Stax创建XML文件的一部分我有一些String形式的XML . 我使用以下命令将其写入Stax输出:

public void addInnerXml(String xml) throws TinyException {
    try {
        parent.adjustStack(this);

        XMLStreamReader2 sr = (XMLStreamReader2) ifact.createXMLStreamReader(new ByteArrayInputStream(xml.getBytes("UTF8")));

        for (int type = sr.getEventType(); sr.hasNext(); type = sr.next()) {
            switch (type) {
                case XMLStreamConstants.COMMENT:
                case XMLStreamConstants.DTD:
                case XMLStreamConstants.START_DOCUMENT:
                case XMLStreamConstants.END_DOCUMENT:
                    continue;
            }
            parent.getWriter().copyEventFromReader(sr, false);
        }

        sr.close();
    } catch (XMLStreamException e) {
        throw new TinyException("addInnerXml", e);
    } catch (UnsupportedEncodingException e) {
        throw new TinyException("addInnerXml", e);
    }
}

这一切都很有效,除了在传递的XML中使用的名称空间,在根元素中定义,在内部节点中再次重复 . 请注意,重复p前缀

<p:sld xmlns:a =“http://schemas.openxmlformats.org/drawingml/2006/main”xmlns:p =“http://schemas.openxmlformats.org/presentationml/2006/main”xmlns:r =“http://schemas.openxmlformats.org/officeDocument/2006/relationships”> <p:cSld> <p:spTree> <p:pic xmlns:p =“http://schemas.openxmlformats.org/presentationml/ 2006 /主“>

有没有办法把它关掉?

注意:XMLStreamReader2实现了org.codehaus.stax2.typed.TypedXMLStreamReader,实际上是XMLStreamReader . parent.getWriter()也返回一个XMLStreamReader2 .

谢谢 - 戴夫