java – 将节点导入新文档
发布时间:2020-09-21 21:33:55 所属栏目:Java 来源:互联网
导读:我正在尝试将基础文档中的节点导入到新文档中,但是当我使用Document.importNode()方法时,它会生成异常.有趣的是,这个异常不包含消息,所以除了堆栈跟踪之外我几乎都是盲目的. (我是 java的新手) 这是我的方法,它将创建一个新文档并导入节点: this.Builder = D
|
我正在尝试将基础文档中的节点导入到新文档中,但是当我使用Document.importNode()方法时,它会生成异常.有趣的是,这个异常不包含消息,所以除了堆栈跟踪之外我几乎都是盲目的. (我是 java的新手) 这是我的方法,它将创建一个新文档并导入节点: > this.Builder = DocumentBuilder 码: public XMLSelection extract ()
{
if (this.Element != null)
{
try
{
Document newDoc = this.Builder.newDocument();
Node node = newDoc.importNode(this.Element,true);
newDoc.appendChild(node);
return new XMLSelection(newDoc);
}
catch(Exception e)
{
Debug.error("XMLSelection::extract",e);
}
}
return null;
}
堆栈跟踪: 02-06 14:27:53.328: W/System.err(9082): org.w3c.dom.DOMException 02-06 14:27:53.328: W/System.err(9082): at org.apache.harmony.xml.dom.NodeImpl.setNameNS(NodeImpl.java:227) 02-06 14:27:53.328: W/System.err(9082): at org.apache.harmony.xml.dom.ElementImpl.(ElementImpl.java:50) 02-06 14:27:53.328: W/System.err(9082): at org.apache.harmony.xml.dom.DocumentImpl.createElementNS(DocumentImpl.java:336) 02-06 14:27:53.328: W/System.err(9082): at org.apache.harmony.xml.dom.DocumentImpl.shallowCopy(DocumentImpl.java:156) 02-06 14:27:53.328: W/System.err(9082): at org.apache.harmony.xml.dom.DocumentImpl.cloneOrImportNode(DocumentImpl.java:208) 02-06 14:27:53.328: W/System.err(9082): at org.apache.harmony.xml.dom.DocumentImpl.importNode(DocumentImpl.java:222) 02-06 14:27:53.328: W/System.err(9082): at com.xxxx.xxxx.XMLSelection.extract(XMLSelection.java:57) 解决方法尝试使用cloneNode,后跟adoptNode,以使用子元素作为新Document的根元素.String xml = "<hello><world /></hello>";
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document0 = db.parse(new InputSource(new StringReader(xml)));
Document document1 = db.newDocument();
NodeList nodeList = document0.getDocumentElement().getChildNodes();
document1.appendChild(document1.adoptNode(nodeList.item(0).cloneNode(true)));
// Serialize the two documents to check that the copy was correct.
ByteArrayOutputStream output = new ByteArrayOutputStream();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document0),new StreamResult(output));
System.out.println(output.toString("UTF-8"));
output.reset();
transformer.transform(new DOMSource(document1),new StreamResult(output));
System.out.println(output.toString("UTF-8"));
} catch (TransformerException e) {
} catch (IOException e) {
} catch (SAXException e) {
} catch (ParserConfigurationException e) {
} (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
