Я создал метод удаления. Мой метод имеет индекс как аргумент, который исходит из позиции jlist. Метод получит позицию из jlist, которую пользователь нажал, и найдите этот элемент в xml и удалите его и всех дочерних элементов.Удаление элементов xml не работает из-за нулевого значения
Таким образом, если пользователь нажмет TrainCategorySpeed имеет индекс 122 и будет искать для этого типа в XML
<type>
<OBJECT_TYPE>TrainCategorySpeed</OBJECT_TYPE>
- <prop>
<DESCRIPTION>Differential speed limit</DESCRIPTION>
<PARENT>NULL</PARENT>
<VIRTUAL>0</VIRTUAL>
<VISIBLE>0</VISIBLE>
<PICTURE>NULL</PICTURE>
<HELP>NULL</HELP>
<MIN_NO>NULL</MIN_NO>
<MAX_NO>NULL</MAX_NO>
<NAME_FORMAT>NULL</NAME_FORMAT>
</prop>
- <param>
<PARAMETER>trainCategory</PARAMETER>
<DATA_TYPE>INTEGER</DATA_TYPE>
<DESCRIPTION>Train category</DESCRIPTION>
<MIN_NO>1</MIN_NO>
<MAX_NO>1</MAX_NO>
<ORDER1>1</ORDER1>
<NESTED>1</NESTED>
<DEFAULT1>NULL</DEFAULT1>
<FORMAT>0:15</FORMAT>
</param>
- <param>
<PARAMETER>speed</PARAMETER>
<DATA_TYPE>INTEGER</DATA_TYPE>
<DESCRIPTION>Speed (km/h (V_DIFF))</DESCRIPTION>
<MIN_NO>1</MIN_NO>
<MAX_NO>1</MAX_NO>
<ORDER1>2</ORDER1>
<NESTED>1</NESTED>
<DEFAULT1>NULL</DEFAULT1>
<FORMAT>0:600:5</FORMAT>
</param>
</type>
Но когда я пытаюсь добиться этого он дает мне исключение NullPointer
на происходит некорректно line: Node type = doc.getElementsByTagName("type").item(x);
x здесь действительно дает правильное положение и тип - это элемент в xml. , но тип пуст.
Это остальная часть метода:
public void deleteObjType(int x) {
System.out.println("index : " + x); // This one will return index : 122 in the console and it does
File file = new File("xmlFiles/CoreDatamodel.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
try {
DocumentBuilder builder = builderFactory.newDocumentBuilder();
builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse(file);
Node type = doc.getElementsByTagName("type").item(x);
System.out.println("type : " + type);
NodeList nodes = type.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
Node element = nodes.item(x);
System.out.println("element : " + element);
// remove node
if ("OBJECT_TYPE".equals(element.getNodeName())) {
type.removeChild(element);
}
}
// Save the new update
save(file, doc);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Полный StackTrace:
java.lang.NullPointerException
at cxmleditor.service.XMLEditorService.deleteObjType(XMLEditorService.java:106)
at xmleditor.gui.XmlEditorMain$deleteObjType.actionPerformed(XmlEditorMain.java:383)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Ваш вопрос очень неясен. В названии говорится, что у вас проблемы с удалением, но в вашем вопросе говорится, что проблема заключается в _общем_ удалении узла. Просьба уточнить. –
Хорошо, я отредактировал заголовок. но эта строка кода дает мне null: Тип узла = doc.getElementsByTagName («type»). item (x); И он должен с тех пор, как ther eis в моем XML-файле. –
Sembrano
Первое правило SO: Если у вас есть исключение, отправьте ПОЛНУЮ СТОЙКУ. –