以下最小示例中的cloneNode()方法适用于java 1.6,但在android 5下引发了代码为14的DOMException。
根据sdk docs的代码14意味着: “NAMESPACE_ERR 如果尝试以对名称空间不正确的方式创建或更改对象。“
有人知道为什么会这样吗? 提前谢谢!
public class M
{
public static void main(String[] args)
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
String text = new String("<blub></blub>");
Document document = builder.parse(new InputSource( new StringReader(text) ));
document.getDocumentElement().cloneNode(true);
}
catch(DOMException e)
{}
catch(ParserConfigurationException e)
{}
catch(IOException e)
{}
catch(SAXException e)
{}
}
}
答案 0 :(得分:0)
显然这是cloneNode和importNode的已知错误:https://stackoverflow.com/a/8438416/671393
“替代方法”是使用adoptNode,但显然这将修改源DOM。
此错误已在更高版本中修复:http://code.google.com/p/android/issues/detail?id=2735#c4
如果错误确实是由于节点不能识别名称空间(如错误报告中所示),那么添加虚拟命名空间可能是另一种解决方法。