使用Xpath删除XML节点

时间:2014-04-22 09:04:55

标签: android xml xpath

我正在尝试从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和图片

1 个答案:

答案 0 :(得分:1)

尝试xpath.compile("//reg/user[Email = '" + sEmail + "']");

如果XML具有名称空间,那么请参阅http://www.edankert.com/defaultnamespaces.html#JAXP_XPathFactory,了解如何使用带名称空间的JAXP XPath API来选择名称空间中的节点。