这里我有xml节点,我正在显示并选择要删除的特定节点。对于我的下面的xml文件和代码,虽然我选择了第二个节点,但只有第一个节点正在删除。
<root>
<book> <!--node 1 -->
<id>1111</id>
<name>abacd</name>
<author>abcd</author>
<price>700</price>
<category>abcd</category>
</book>
<book> <!--node 2 -->
<id>2222</id>
<name>abacd</name>
<author>abcd</author>
<price>700</price>
<category>abcd</category>
</book>
<book> <!--node 3 -->
<id>3333</id>
<name>abacd</name>
<author>abcd</author>
<price>700</price>
<category>abcd</category>
</book>
</root>
我的java代码将节点删除为
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
int nodeValue = Integer.parseInt(nodeNumber);
//nodeValue is node number eg: 2;
NodeList bookList = doc.getElementsByTagName("book");
for (int i = 1; i <= bookList.getLength(); i++) {
if (i == nodeValue) {
Element rootElement = (Element) doc.getElementsByTagName("book").item(0);
Element idElement = (Element) doc.getElementsByTagName("id").item(0);
idElement.getParentNode().removeChild(idElement);
Element nameElement = (Element) doc.getElementsByTagName("name").item(0);
nameElement.getParentNode().removeChild(nameElement);
Element authorElement = (Element) doc.getElementsByTagName("author").item(0);
authorElement.getParentNode().removeChild(authorElement);
Element priceElement = (Element) doc.getElementsByTagName("price").item(0);
priceElement.getParentNode().removeChild(priceElement);
Element categoryElement = (Element) doc.getElementsByTagName("category").item(0);
categoryElement.getParentNode().removeChild(categoryElement);
rootElement.getParentNode().removeChild(rootElement);
doc.normalize();
}
}
任何人都可以指导我在哪里更改我的代码。
答案 0 :(得分:0)
您总是通过此
调用第一个节点doc.getElementsByTagName("book").item(0);
而是尝试使用
doc.getElementsByTagName("book").item(nodeValue);
或使用bookList.item(nodeValue)
直接访问节点
答案 1 :(得分:0)
如果我们想根据节点号删除节点,那么下面的代码会有所帮助。我得到了我的回答
int nodeValue = Integer.parseInt(nodeNumber);
NodeList bookList = doc.getElementsByTagName("book");
Node nNode = bookList.item(nodeValue);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
eElement.getParentNode().removeChild(nNode);
}
它将删除所选节点(例如:2)。