2010-08-06 74 views
1

爪哇的Xerces 2.9.1插入XML:空间= '保留' 在DOM

insertHere.setAttributeNS(XMLConstants.XML_NS_URI, "xml:space", "preserve"); 

insertHere.setAttributeNS(XMLConstants.XML_NS_URI, "space", "preserve") 

都结束了的只是space='preserve',没有XML前缀的属性。

insertHere.setAttribute("xml:space", "preserve") 

的作品,但它似乎有点不对。我错过了什么?

编辑

我检查。

我在setNamespaceAware打开的情况下阅读了一个模板文档。

然后,我使用以下来制作它的副本,然后我开始插入新的元素。

public static Document copyDocument(Document input) { 
     DocumentType oldDocType = input.getDoctype(); 
     DocumentType newDocType = null; 
     Document newDoc; 
     String oldNamespaceUri = input.getDocumentElement().getNamespaceURI(); 
     if (oldDocType != null) { 
      // cloning doctypes is 'implementation dependent' 
      String oldDocTypeName = oldDocType.getName(); 
      newDocType = input.getImplementation().createDocumentType(oldDocTypeName, 
                     oldDocType.getPublicId(), 
                     oldDocType.getSystemId()); 
      newDoc = input.getImplementation().createDocument(oldNamespaceUri, oldDocTypeName, 
                   newDocType); 
     } else { 
      newDoc = input.getImplementation().createDocument(oldNamespaceUri, 
                   input.getDocumentElement().getNodeName(), 
                   null); 
     } 
     Element newDocElement = (Element)newDoc.importNode(input.getDocumentElement(), true); 
     newDoc.replaceChild(newDocElement, newDoc.getDocumentElement()); 
     return newDoc; 
    } 

回答

1

当我运行下面的代码:

import javax.xml.XMLConstants; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     dbf.setNamespaceAware(true); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document document = db.newDocument(); 

     Element rootElement = document.createElement("root"); 
     document.appendChild(rootElement); 
     rootElement.setAttributeNS(XMLConstants.XML_NS_URI, "space", "preserve"); 

     TransformerFactory tf = TransformerFactory.newInstance(); 
     Transformer t = tf.newTransformer(); 
     t.transform(new DOMSource(document), new StreamResult(System.out)); 
    } 

} 

我得到以下输出:

<root xml:space="preserve"/> 

你如何建立你的文件吗?

+0

不知何故,我怀疑我忘了'setNamespaceAware'。 – bmargulies 2010-08-12 17:43:34