高级特性 第六章

课后练习1:
<?xml version="1.0" encoding="UTF-8"?>  
<scores>  
    <student id="1">  
        <name>牛猪圈</name>  
        <course>java</course>  
        <score>88</score>  
    </student>  
    <student id="2">  
        <name>周日天</name>  
        <course>python</course>  
        <score>66</score>  
    </student>  
</scores>  

课后练习2:
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
  
import org.dom4j.Node;  
import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.NodeList;  
  
public class ShowInfo {  
  
    public static void main(String[] args) {  
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();  
        try {  
            // 创建DOM解析器对象  
            DocumentBuilder builder = builderFactory.newDocumentBuilder();  
            Document document = builder.parse("score.xml"); // 解析score.xml文件  
  
            NodeList list = document.getElementsByTagName("student"); // 读取scores  
            for (int i = 0; i < list.getLength(); i++) {  
                Element element = (Element) list.item(i);  
                String id = element.getAttribute("id"); // 获得student的属性值  
                // 获取student节点下的所有元素  
                NodeList list2 = element.getChildNodes();   
                System.out.println("ID:"+id);  
                for (int j = 0; j < list2.getLength(); j++) {  
                    if ((list2.item(j).getNodeType() == Node.ELEMENT_NODE)) {  
                        System.out.println(list2.item(j).getNodeName()+":"+list2.item(j).getFirstChild().getNodeValue());  
                    }  
                }  
                System.out.println("");  
            }  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
  
    }  
}  

课后练习3:
import java.io.FileOutputStream;  
  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
import javax.xml.transform.OutputKeys;  
import javax.xml.transform.Transformer;  
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.Element;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  
  
public class Modification {  
      
    DocumentBuilderFactory builderFactory = null; //DOM解析器工厂对象  
      
    Document document = null;  //DOM数对象  
      
    NodeList list = null; //节点集合  
      
    DocumentBuilder builder = null;  
      
    public static void main(String[] args) {  
        Modification modification = new Modification();  
//      modification.delete();  
//      modification.amend();  
//      modification.add();  
    }  
      
    /** 
     * 删除id为1的节点 
     */  
    public  void delete() {  
        builderFactory = DocumentBuilderFactory.newInstance();  
        try {  
            builder = builderFactory.newDocumentBuilder();  
            document = builder.parse("score.xml");  
            list = document.getElementsByTagName("student");  
            for (int i = 0; i < list.getLength(); i++) {  
                Node node = list.item(i);  
                Element element = (Element) list.item(i);  
                String id = element.getAttribute("id");  
                if (id.equals("1") ) {  //如果id为1  
                    NodeList list2 = node.getChildNodes();   //拿到id为1的student的所有子节点  
                    for (int j = 0; j< list2.getLength(); j++) {  
                        Node node2 = list2.item(j);  
                        if ((node2.getNodeType() == Node.ELEMENT_NODE) && (node2.getNodeName().equals("score"))) {  //如果是score子节点  
                            Element element2 = (Element) node2;  
                            node.removeChild(element2);  
                        }  
                    }  
                }  
            }  
            save("NewScore.xml");  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
          
    }  
      
    /** 
     * 修改id为2的成绩为60 
     */  
    public void amend() {  
        builderFactory = DocumentBuilderFactory.newInstance();  
        try {  
            builder = builderFactory.newDocumentBuilder();  
            document = builder.parse("score.xml");  
              
            list = document.getElementsByTagName("score");  
            Element element = (Element) list.item(1);  
            element.setTextContent("60分");  
            save("AmendScore.xml"); // 保存xml文件  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
          
    }  
      
    /** 
     * 添加id为2的成绩为60方法 
     */  
    public  void add() {  
        builderFactory = DocumentBuilderFactory.newInstance();  
        try {  
            builder = builderFactory.newDocumentBuilder();  
            document = builder.parse("score.xml");  
              
            list = document.getElementsByTagName("scores");  
            //新建student节点  
            Element element = document.createElement("student");  
            element.setAttribute("id", "3");  
              
            //新建name节点  
            Element element2 = document.createElement("name");  
            element2.setTextContent("蒋宝宝");  
              
            //新建course节点  
            Element element3 = document.createElement("course");  
            element3.setTextContent("java");  
              
            //创建score节点  
            Element element4 = document.createElement("score");  
            element4.setTextContent("88");  
              
            //添加student节点里面的子节点  
            element.appendChild(element2);  
            element.appendChild(element3);  
            element.appendChild(element4);  
              
            list.item(0).appendChild(element); //添加student节点  
            save("AddScore.xml"); // 保存xml文件  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
    }  
      
    /** 
     * 保存修改后的xml文件 
     */  
    public void save(String path) {  
        TransformerFactory factory = TransformerFactory.newInstance();  
        try {  
            Transformer transformer = factory.newTransformer();  
            DOMSource domSource = new DOMSource(document);  
              
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");  
            StreamResult result = new StreamResult(new FileOutputStream(path));  
            transformer.transform(domSource, result);  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
          
    }  
}  

课后练习4:
import java.io.File;  
import java.util.Iterator;  
  
import org.dom4j.Document;  
import org.dom4j.DocumentException;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;  
  
public class DOM4jShowInfo {  
  
    Document document = null;  //DOM4j下的DOM树对象  
    /** 
     * 加载DOM树 
     */  
    public void loadDOM() {  
        SAXReader reader = new SAXReader();  
        try {  
            document = reader.read(new File("score.xml"));  
        } catch (DocumentException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
      
    /** 
     * 显示XML文件 
     */  
    public void showInfoXML() {  
        Element root = document.getRootElement();  //拿到根节点  
        Iterator rootIterator = root.elementIterator();  
        while (rootIterator.hasNext()) {  //循环student  
            Element  studentElement = (Element) rootIterator.next();  
            String idStr = studentElement.attributeValue("id");  //id的属性值;  
            System.out.println("id:"+idStr);  
              
            Iterator studentChild = studentElement.elementIterator(); //student下的字节点  
            while (studentChild.hasNext()) {  //循环student下的子节点  
                Element stuChildElement = (Element) studentChild.next();  
                String nodeName = stuChildElement.getName(); //子节点名  
                String nodeText = stuChildElement.getText(); //子节点内容  
                System.out.println(nodeName+ ":"+nodeText);  
            }  
            System.out.println("");  
        }  
    }  
      
    public static void main(String [] args) {  
        DOM4jShowInfo dom = new DOM4jShowInfo();  
        dom.loadDOM();  
        dom.showInfoXML();  
    }  
}  

猜你喜欢

转载自blog.csdn.net/lsxdbd/article/details/80570527