我想将一个节点复制到另一个Documentg,但它总是有关于
的DOMExceptionorg.apache.harmony.xml.dom.NodeImpl.setNameNS(NodeImpl.java:227)
这是我的代码
private String getString(Node seqNode) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = factory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("Test");
doc.appendChild(root);
/* following line will cause DOMException */
doc.importNode(seqNode, true);
...
...
} catch (Exception e) {
}
}
其中seqNode属于其他文档
有没有人知道这个问题? : - )
答案 0 :(得分:3)
我也遇到了这个问题。调用importNode()或cloneNode()时,我收到此异常。而BTW,我正在解析/生成的XML没有使用命名空间。
Android中包含的DOM解析器(来自Apache Harmony)似乎是错误的。请看这个链接:Issue 2735: Harmony DOM implementation is buggy and noncompliant。如果使用普通Java 1.6(当然不是基于Harmony)执行相同的代码,一切正常。
我尝试在DocumentBuilder上设置setNamespaceAware(true),但这没有帮助。
最终,我通过使用adoptNode()而不是importNode()放弃并解决了这个问题。这有点乱伦,因为它从一个Document树中窃取节点并将其放入另一个Document树中。但就我而言,第一个文档树只是暂时的,所以我可以这样做。
答案 1 :(得分:0)
我猜,但似乎您正在尝试导入已定义命名空间的节点,其中您的目标文档没有声明此命名空间。
那么,源文档中声明了哪些名称空间?您是否在目标文档中声明了任何名称空间?
答案 2 :(得分:0)
输入是一个smil字符串,如下所示:
<smil>
<head>
<layout>
<root-layout height="720" width="1280"/>
<transition id="fade" type="fade" subtype="crossfade" dur="1s"/>
<region id="_33_32_bkgd_image" left="0" top="0" width="1280" height="720" background-color="#c12121" showBackground="whenActive" z-index="0"></region>
<region id="_33_32_I001" left="380" top="27" width="405" height="352" z-index="1"></region><region id="_33_32_I002" left="0" top="365" width="354" height="354" z-index="2"></region>
</layout>
</head>
<body>
<seq begin="wallclock(2011-09-22T01:52:00)" end="wallclock(2011-09-23T00:00:00)">
<par dur="10s" xml:id="32" repeatCount="1">
<brush color="#c12121" region="_33_32_bkgd_image"></brush>
<seq repeatCount="indefinite">
<img xml:id="30" region="_33_32_I001" src="http://127.0.0.1/Service/User/2_user/Media/Image/30_image.jpg?JFBukihsTu" dur="5s" fit="meet" regPoint="center" regAlign="center">
<metadata xml:id="meta-rdf">
<meta name="MD5" content="7c8b59b28ea2247f20bc538dcb7108f3"></meta><meta name="width" content="531"></meta><meta name="height" content="720"></meta></metadata></img>
<img xml:id="27" region="_33_32_I001" src="http://127.0.0.1/Service/User/2_user/Media/Image/27_image.jpg?jTqCMuIxsX" dur="5s" fit="meet" regPoint="center" regAlign="center">
<metadata xml:id="meta-rdf">
<meta name="MD5" content="db51409f243f79c566811d1b307a77a1"></meta><meta name="width" content="427"></meta><meta name="height" content="602"></meta></metadata></img>
</seq>
</par>
</seq>
</body>
</smil>
并且原始文档由以下人员生成:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(new ByteArrayInputStream(smil.getBytes()));
并且seqNode表示“seq”节点(body标签的子节点)
我想将“seq”及其所有孩子复制到新文档