#java #dom
#java #dom
Вопрос:
Я пытаюсь заменить узел документа на другой узел с той же структурой из другого документа (остальная структура и происхождение двух документов различны), используя этот метод:
public static void replaceLines(Document target, Document source){
Node sourceNode =source.getElementsByTagName("lines").item(0);
Node targetNode=target.getElementsByTagName("lines").item(0);
target.getChildNodes().item(0).replaceChild(sourceNode,targetNode);
}
Обратите внимание, что:
target.getElementsByTagName("lines").item(0) = target.getChildNodes().item(0)
И я получаю это исключение:
10-20 16:19:48.259 20021-20021/myapp.mygestion E/AndroidRuntime:
FATAL EXCEPTION: main
Process: myapp.mygestion, PID: 20021
org.w3c.dom.DOMException
at org.apache.harmony.xml.dom.InnerNodeImpl.insertChildAt(InnerNodeImpl.java:118)
at org.apache.harmony.xml.dom.InnerNodeImpl.replaceChild(InnerNodeImpl.java:199)
at mygestion.com.utiles.XmlEditor.replaceLines(XmlEditor.java:128)
at mygestion.com.DetalleFicha$9.onPostExecute(DetalleFicha.java:1078)
at android.os.AsyncTask.finish(AsyncTask.java:636)
at android.os.AsyncTask.access$500(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Как я уже сказал, у него нет подробного сообщения, и я не могу найти причину ошибки, есть идеи?
Ответ №1:
Похоже, что исключение генерируется при попытке заменить узел из исходного документа в целевой документ. Как указано в replaceChild(Node newChild, Node oldChild)
Javadoc, DOMException генерируется, если новый дочерний элемент создается из другого документа. Вы должны попытаться клонировать узел, создать его с целевым документом, а затем добавить / заменить его.