<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by a (a) -->
<contacts>
<contact 编号="200720" 性别="男">
<姓名>张隆</姓名>
<QQ>356213186</QQ>
</contact>
<contact 编号="200719" 性别="男">
<姓名>于德洋</姓名>
<QQ>865212175</QQ>
</contact>
<contact 编号="200704" 性别="女">
<姓名>韩晓洁</姓名>
<QQ>526478190</QQ>
</contact>
<contact 编号="200703" 性别="女">
<姓名>龚晚晚</姓名>
<QQ>92144633</QQ>
</contact>
</contacts>==================================以上是XML代码==================================
try 
  {
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  //打开确认选项,关掉名称空间敏感性选项。
  factory.setValidating(false);
  factory.setNamespaceAware(false);
 
DocumentBuilder builder = factory.newDocumentBuilder();
  doc = builder.parse(new File(filename));
 
  NodeList contacts=null;
contacts=doc.getElementsByTagName("contact");
for (int i = 0; i < contacts.getLength(); i++) 
{
  ********这里应该怎么写呀********
}  

把所有性别为男的整个结点删除就行了

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【raingi520】截止到2008-06-29 22:58:16的历史汇总数据(不包括此帖):
    发帖数:13                 发帖分:350                
    结贴数:9                  结贴分:260                
    未结数:4                  未结分:90                 
    结贴率:69.23 %            结分率:74.29 %            
    楼主加油
      

  2.   

    是呀
    保存文件那部分代码我已经有的,只是这部分不知道怎么写
    整个文件是这样import java.io.*;
    import javax.xml.parsers.*;import javax.xml.transform.*;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.*;
    import org.w3c.dom.*;public class dom9A_3{
    Document doc=null;
     public static void main(String[] args) {
     
    dom9A_3 d1 = new dom9A_3(); 
    d1.parse("contact.xml"); 

    d1.saveDoc("myContact.xml");
     }
     private void parse(String filename)
     {
      try 
      {
      // 获得 Document Builder Factory
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     //打开确认选项,关掉名称空间敏感性选项。
      factory.setValidating(false);
      factory.setNamespaceAware(false);
    DocumentBuilder builder = factory.newDocumentBuilder();
      doc = builder.parse(new File(filename));
      //doc.normalizeDocument() ;
     
      //对dom进行处理,使得dom 中只包含需要的数据
       // 取得所有的score元素,如果course属性为xml的话,将分数相加
      NodeList genList=doc.getElementsByTagName("contact");//先得到contact的节点,赋值给一个列表
      for(int i=0;i<genList.getLength();i++)//循环节点的数目,以genList的长度
      {
      Node firstContactNode=genList.item(i);//把第一个contact赋值到node
      Element firstNameElement=(Element)firstContactNode;//转换会元素
      if(firstNameElement.getAttribute("性别").equals("女"))//判断里面的属性是不是女的
      {
     
      //得到姓名的节点.注意的是从firstNameElement取值的.
      NodeList firstvalueList= firstNameElement.getElementsByTagName("姓名");
    //把得到的列表转回元素并得到下表0的列表
      Element nameElement=(Element)firstvalueList.item(0);
    //转回nodelist
      NodeList textFNlist=nameElement.getChildNodes();
    //输出
      System.out.println (((Node)textFNlist.item(0)).getNodeValue().trim());
     
      } 
    }
    }
      catch (Exception e) 
      {
       e.printStackTrace();
      }
    }
    //本方法是将内存中的dom保存到磁盘文件
     private void saveDoc(String filename)
     {
      //把doc代表的XML dom树输出到指定的文件 
      try
      {
     
    //首先创建一个DOMSource对象
    DOMSource domSrc= new DOMSource (doc);
    File outfile = new File (filename);
    //创建一个StreamResult对象
    StreamResult stream = new StreamResult (outfile);
    //调用JAXP中的XSLT引擎来实现输出DOM树到XML文件中的功能。
    //输入为DOMSource对象,输出为StreamResut对象。
    //首先创建一个TransformerFactory对象,再由此创建Transformer对象,使用它来输出XML文档。
    TransformerFactory tranfac=TransformerFactory.newInstance();
    Transformer trans=tranfac.newTransformer ();
    //调用Transformer对象 的transform()方法输出xml,
    trans.transform(domSrc,stream);
      }
      catch (Exception e) 
    {
        e.printStackTrace();
      }
    }
    }怎么改
      

  3.   

    if(contacts.getAttribute.getNameItem("性别")==男)
    {
        x=conntacts[i];
        x.parentNode.removeChild(x);
     }
      

  4.   

    if(contacts.getAttributes.getNameItem("性别")==男)
    {
        x=conntacts[i];
        x.parentNode.removeChild(x);
     }
      

  5.   

    用UTF-8保存的时候出了点问题.
    移除的方法是for (int i = 0; i < contacts.getLength(); i++) 
    {
    Node node = contacts.item(i);
    NamedNodeMap nAttr=node.getAttributes();
    if(nAttr.getNamedItem("性别").getNodeValue().equals("男"))
    {
    node.getParentNode().removeChild(node);//移除这个结点
    }
    }  
      

  6.   

    把编码都改成了GBK2312
    package com.awu.xml;import java.io.File;
    import java.io.IOException;
    import java.util.Properties;import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;/**
     * 删除xml中的某个结点
     * @author Administrator
     *<?xml version="1.0" encoding="GBK2312" standalone="yes"?>
    <!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by a (a) -->
    <contacts>
        <contact 编号="200720" 性别="男">
            <姓名>张隆</姓名>
            <QQ>356213186</QQ>
        </contact>
        <contact 编号="200719" 性别="男">
            <姓名>于德洋</姓名>
            <QQ>865212175</QQ>
        </contact>
        <contact 编号="200704" 性别="女">
            <姓名>韩晓洁</姓名>
            <QQ>526478190</QQ>
        </contact>
        <contact 编号="200703" 性别="女">
            <姓名>龚晚晚</姓名>
            <QQ>92144633</QQ>
        </contact>
    </contacts>
     */
    public class XMLTest {
      public static void main(String[]args)
      {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          //打开确认选项,关掉名称空间敏感性选项。
          factory.setValidating(false);
          factory.setNamespaceAware(false);
          
         DocumentBuilder builder;
    try {
    builder = factory.newDocumentBuilder();
    Document   doc = builder.parse(new File("D:\\aa.xml"));

    NodeList contacts=null;
    contacts=doc.getElementsByTagName("contact");
    for (int i = 0; i < contacts.getLength(); i++) 
    {
    Node node = contacts.item(i);
    NamedNodeMap nAttr=node.getAttributes();
    if(nAttr.getNamedItem("性别").getNodeValue().equals("男"))
    {
    node.getParentNode().removeChild(node);
    }
    }     
    DOMSource domSrc= new DOMSource (doc);
                File outfile = new File ("D:\\aa.xml");
                //创建一个StreamResult对象
                StreamResult stream = new StreamResult (outfile);
                //调用JAXP中的XSLT引擎来实现输出DOM树到XML文件中的功能。
                //输入为DOMSource对象,输出为StreamResut对象。
                //首先创建一个TransformerFactory对象,再由此创建Transformer对象,使用它来输出XML文档。
                TransformerFactory tranfac=TransformerFactory.newInstance();
                Transformer trans=tranfac.newTransformer ();
                Properties properties = trans.getOutputProperties();
                properties.put(OutputKeys.INDENT,"yes");   
                properties.setProperty(OutputKeys.ENCODING,"GB2312"); 
                trans.setOutputProperties(properties);             //调用Transformer对象 的transform()方法输出xml,
                    trans.transform(domSrc,stream); } catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SAXException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (TransformerConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (TransformerException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }   }
    }
      

  7.   

    if(nAttr.getNamedItem("性别").getNodeValue().equals("男"))
                    {
                        node.getParentNode().removeChild(node);
                    }这边应该改成
    if(nAttr.getNamedItem("性别").getNodeValue().equals("男"))
                    {
                        i--;
                        node.getParentNode().removeChild(node);
                    }
      

  8.   

    请问一下,javax包是自带的么?