刪除XML文檔的根節點我想使用DOM API如何使用DOM
<hs:PageWrapper>
<div id="botton1"/>
<div id="botton2"/>
</hs:PageWrapper>
所以請從下面的XML文檔的包裝,我只會有這些作爲最終輸出:
<div id="botton1"/>
<div id="botton2"/>
我該如何在Java中做到這一點?
刪除XML文檔的根節點我想使用DOM API如何使用DOM
<hs:PageWrapper>
<div id="botton1"/>
<div id="botton2"/>
</hs:PageWrapper>
所以請從下面的XML文檔的包裝,我只會有這些作爲最終輸出:
<div id="botton1"/>
<div id="botton2"/>
我該如何在Java中做到這一點?
你想要做的事不會導致格式良好的XML,因爲在文檔根目錄下會有2個元素。但是,執行你想要的代碼在下面。它獲取包裝器元素的子節點,爲每個節點創建一個新文檔,將節點導入文檔並將文檔寫入String。
public String peel(String xmlString) {
StringWriter writer = new StringWriter();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(
xmlString)));
NodeList nodes = document.getDocumentElement().getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
Node n = nodes.item(i);
Document d = builder.newDocument();
Node newNode = d.importNode(n, true);
d.insertBefore(newNode, null);
writeOutDOM(d, writer);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return writer.toString();
}
protected void writeOutDOM(Document doc, Writer writer)
throws TransformerFactoryConfigurationError, TransformerException {
Result result = new StreamResult(writer);
DOMSource domSource = new DOMSource(doc);
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
transformer.setOutputProperty("omit-xml-declaration", "yes");
transformer.transform(domSource, result);
}
嗨非常感謝你。我試過,並且出現以下錯誤:HIERARCHY_REQUEST_ERR:試圖插入不允許的節點。這發生在行d.appendChild(newNode); – 2010-11-16 22:17:42
嗯。我在發佈答案之前嘗試了它,並且它工作正常。我在Linux上使用SUN JDK 6。你在用什麼? – corriganjc 2010-11-16 22:26:10
@Farouk,我對代碼做了一些小改動。我用insertBefore替換了appendChild。 – corriganjc 2010-11-16 22:38:33
您要的輸出不是有效的XML文檔。您將不得不創建兩個單獨的文檔並逐個序列化它們。爲什麼你想要產生一個無效的文件? – 2010-11-16 21:33:27