如何在Stax中编写XML字符串而不重复命名空间

时间:2018-02-17 20:41:37

标签: java xml stax

使用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">     <号码:CSLD> <号码:spTree> <号码:PIC
  的xmlns:P =" HTTP://schemas.openxmlformats.org/presentationml/2006/main">

有没有办法将其关闭?

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

谢谢 - 戴夫

0 个答案:

没有答案