gpt4 book ai didi

blackberry - 带有 kxml 的节点的深拷贝(java me)

转载 作者:行者123 更新时间:2023-12-01 05:28:13 25 4
gpt4 key购买 nike

我在开发黑莓时遇到了问题。我正在使用 KXML2 api 进行 XML 解析(实际上,我得到了其他人的代码来继续和修复,所以我必须使用它)。问题是 java me 中缺乏克隆,并且在尝试深度复制节点时遇到了一些困难。 (我不想详细说明,但重点是,我需要将数据替换为 html 的特定点,并且有一个 xml 描述器)所以..! :)

XMLElement childNode = node.getElement(ci);

这是我需要复制的元素。 XMLElement 是一个简单的包装类,没关系,它包含 Element 属性和一些有用的方法。

现在我想要的有点像这样:
XMLElement newChildNode = childNode.clone();

由于 Java ME 中没有克隆,没有可克隆接口(interface),所以我不能这样做,这只会创建对原始元素的引用,我需要在修改新元素时保留它:
XMLElement newChildNode = childNode;

谁能想出一个有用的想法,如何创建我的 childNode 元素的深拷贝?非常感谢您!

最佳答案

我设法用这个简单的实用功能解决了这个问题。它只是遍历属性,复制它们并在需要时递归调用函数。

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;
}

关于blackberry - 带有 kxml 的节点的深拷贝(java me),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com