解析XML文件——DOM基本操作

1.DOM的常用方法

1)Document接口常用方法

方法说明
public NodeList getELementsByTagName(String tagName)取得指定名称的NodeList
public Element createElement(String tagName) throws DOMException创建一个指定名称的节点
public Text createTextNode(String data)创建一个文本内容节点
Element createElement(String tagName) throws DOMException创建一个节点元素
public Attr createAttribute(String name) throws DOMException创建一个属性



2)Node接口常用方法

方法说明
Node appendChild(Node newChile) throws DOMException在当前节点下增加一个新节点
public NodeList getChildNodes()取得本节点的全部子节点
public Node getFirstChild()取得本节点的第一个子节点
public Node getLastChild()取得本节点的最后一个子节点
public boolean hasChildNodes()判断是否还有其他节点
public boolean hasAttributes()判断是否还有其他属性
String getNodeValue() throws DOMException取得节点内容



3)NodeList接口常用方法

方法说明
public int getLength()取得节点个数
public Node item(int index)根据索引取得节点对象



4)StreamResult类的构造方法

方法说明
public StreamResult(File f)指定输出文件
public StreamResult(OutputStream outputStream)指定输出的输出流

2.DOM解析XML文件

//DOM解析XML文件示例
//假设已导入所需的包
public class Main {
    public static void main(String args[]) {
        //建立DocumentBuilderFactory,用于取得DocumentBuilder
        DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();

        DocumentBuilder bui = null;
        try {
            //通过DocumentBuilderFactory,取得DocumentBuilder
            bui = fac.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }

        Document doc = null;
        try {
            //读取指定路径的xml文件
            doc = bui.parse("C:" +
                    File.separator + "DomDemo1.xml");
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //查找'link'节点
        NodeList nl = doc.getElementsByTagName("link");
        //输出nl中,第一个子节点中的文本节点内容
        for (int x = 0; x < nl.getLength(); x++) {
            Element e = (Element) nl.item(x);
            /*
            item(0).getFirstChile()为取得第一个子节点的第一个文本节点
            但是若是'link'中有多个节点,就可以改变index,
            如:改为item(1)就会输出第二个name的value
            */
            System.out.print("name:" + e.getElementsByTagName("name").item
                    (0).getFirstChild().getNodeValue());
            System.out.println("  age:" + e.getElementsByTagName("age").item
                    (0).getFirstChild().getNodeValue());
        }
    }
}

3.DOM生成XML文件

//DOM生成XML文件示例
//假设已导入所需的包
public class Main {
    public static void main(String args[]) {
        //建立DocumentBuilderFactory,以取得DocumentBuilder
        DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();

        DocumentBuilder bul = null;
        try {
            //通过DocumentBuilderFactory,取得DocumentBuilder
            bul = fac.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }

        //定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
        Document doc = null;
        //创建一个新文档
        doc = bul.newDocument();

        //建立各个操作节点
        Element stulist = doc.createElement("stulist");
        Element link1 = doc.createElement("link");
        Element link2 = doc.createElement("link");
        Element name1 = doc.createElement("name");
        Element age1 = doc.createElement("age");
        Element name2 = doc.createElement("name");
        Element age2 = doc.createElement("age");

        //设置文本内容
        name1.appendChild(doc.createTextNode("aa"));
        age1.appendChild(doc.createTextNode("17"));
        name2.appendChild(doc.createTextNode("bb"));
        age2.appendChild(doc.createTextNode("18"));

        //设置节点关系
        link1.appendChild(name1);  //子节点
        link1.appendChild(age1);
        link2.appendChild(name2);
        link2.appendChild(age2);
        stulist.appendChild(link1);
        stulist.appendChild(link2);
        doc.appendChild(stulist);  //文档上保存节点

        //输出文档到文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = null;
        try {
            t = tf.newTransformer();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        }
        //设置字符编码
        t.setOutputProperty(OutputKeys.ENCODING,"utf-8");
        //输出文档
        DOMSource sou = new DOMSource(doc);
        //指定输出位置
        StreamResult res = new StreamResult(new File("C:" + File.separator + "DomDemo2.xml"));
        try {
            //输出
            t.transform(sou,res);
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值