我正在尝试使用XPath从XML文件中删除节点及其子节点。这是我尝试过但不起作用的。
这是xml:
<registration>
<users>
<name>abc</name>
<class>10th</class>
<email>demo@mail.com</email>
</users>
</registration>
我通过搜索该电子邮件的特定记录然后将其删除来获取用户的电子邮件地址。
以下是代码:
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//email[text()='" + sEmail + "']";
System.out.println(expression);
Node node = (Node) xPath.compile(expression).evaluate(xmlDocument,XPathConstants.NODE);
if (null != node) {
Node pNode = node.getParentNode();
nodeList = pNode.getChildNodes();
for (int i = 0; null != nodeList && i < nodeList.getLength(); i++) {
Node nod = nodeList.item(i);
if (nod.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(nod.getNodeName() + " : "nod.getFirstChild().getNodeValue());
Node cNode = nod.getFirstChild();
nod.getParentNode().removeChild(cNode);
}
}
}
以下是我得到的例外情况:
04-03 15:39:18.274: E/AndroidRuntime(23163): at org.apache.harmony.xml.dom.InnerNodeImpl.removeChild(InnerNodeImpl.java:181)
答案 0 :(得分:2)
应该是
cNode.getParentNode().removeChild(cNode);
或
nod.removeChild(cNode);
让我们说A
是nod
的父节点。您目前要做的是从cNode
删除孩子A
,而您想从cNode
nod
<强>更新强>
如果要删除整个<user/>
记录,则代码可以简单得多。无需手动删除每个子元素。
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//user[email='" + sEmail + "']";
System.out.println(expression);
Node node = (Node) xPath.compile(expression).evaluate(xmlDocument,XPathConstants.NODE);
if (node != null) node.getParentNode().removeChild(node);