我在开发Blackberry时遇到了问题。我正在使用KXML2 api进行XML解析(实际上,我得到了别人的代码来继续修复,所以我必须使用它)。问题是java中缺少克隆,并且在尝试深度复制节点时我有一些困难。 (我不想详细介绍,但重点是,我需要将数据替换为html的特定点,并且有一个xml描述符)所以..! :)
XMLElement childNode = node.getElement(ci);
这是我需要复制的元素。 XMLElement是一个简单的包装类,没关系,它包含和Element属性以及一些有用的方法。
现在我想要的东西有点像这样:
XMLElement newChildNode = childNode.clone();
由于Java ME中没有克隆,没有可克隆的接口,我不能这样做,这只会创建对原始元素的引用,我需要保留它,同时修改新元素:
XMLElement newChildNode = childNode;
任何人都可以提出一个有用的想法,如何创建childNode元素的深层副本?非常感谢你提前!
答案 0 :(得分:1)
我设法通过这个简单的实用功能来解决问题。它只是遍历属性,复制它们并在需要时递归调用函数。
public static Element createClone(Element toClone) {
String namespace = (toClone.getNamespace() == null) ? "" : toClone.getNamespace();
String name = (toClone.getName() == null) ? "" : toClone.getName();
Element result = toClone.createElement(namespace, name);
int childCount = toClone.getChildCount();
int attributeCount = toClone.getAttributeCount();
for (int i = 0; i < attributeCount; i++) {
result.setAttribute(toClone.getAttributeNamespace(i), toClone.getAttributeName(i), toClone.getAttributeValue(i));
}
for (int j = 0; j < childCount; j ++) {
Object childObject = toClone.getChild(j);
int type = toClone.getType(j);
if (type == Node.ELEMENT) {
Element child = (Element) childObject;
result.addChild(Node.ELEMENT, createClone(child));
} else if (type == Node.TEXT) {
String childText = new String((String) childObject);
if (!childText.equals("")) {
result.addChild(Node.TEXT, childObject);
}
}
}
return result;
}