我正在尝试从XML文档中删除一些节点,但它在这里不起作用的是XML
<?xml version="1.0" encoding="UTF-8" ?>
<reg>
<user>
<Name>adik</Name>
<Email>adil@mail.com</Email>
<Picture>/storage/sdcard0/XLEZData/EZImage/20130425163759.PNG</Picture>
<LastEdited>7 Apr 2014 09:28:27</LastEdited>
</user>
<user>
<Name>adil</Name>
<Email>adil123@mail.com</Email>
<Picture>/storage/sdcard0/DCIM/Camera/20140318_165923(0).jpg</Picture>
<LastEdited>7 Apr 2014 09:29:06</LastEdited>
</user>
</reg>
这是代码
private void DeleteRecord(String sEmail) {
try {
////
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document document = dbf.newDocumentBuilder().parse(new File(
Environment.getExternalStorageDirectory()
+ "/Reginfo/output/data.xml"));
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expression = xpath.compile("//reg/user[Email = '" + sEmail + "']");
Log.v("expression", expression.toString());
Node b13Node = (Node) expression.evaluate(document, XPathConstants.NODE);
b13Node.getParentNode().removeChild(b13Node);
try{
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.transform(new DOMSource(document), new StreamResult(System.out));
}
catch(Exception e){}
////
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}
我想要的是删除整个用户节点及其子邮件名称,LastEdited和图片
答案 0 :(得分:1)
尝试xpath.compile("//reg/user[Email = '" + sEmail + "']");
。
如果XML具有名称空间,那么请参阅http://www.edankert.com/defaultnamespaces.html#JAXP_XPathFactory,了解如何使用带名称空间的JAXP XPath API来选择名称空间中的节点。