Java中操作xml(二)

   昨晚我写了关于java中利用SAX解析xml文档的一些内容,作为xml解析的重要方式Dom解析,我想这个不能不与大家分享。所以在此写下java中利用DOM解析xml。好了不废话了,我们开始吧!

   首先我们还是来看看利用DOM解析xml常用到的一些对象:

   DocumentBuilderFactory  

   DocumentBuilder

   Document

   Element

   以上这几个对象是作为DOM解析xml的核心对象,下面我们来看看它们的使用方式吧!

   InputStream is = this.getResources().getAssets().open("Work.xml");
   DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = documentFactory.newDocumentBuilder();
   Document document = builder.parse(is);
   Element element = document.getDocumentElement();

   如果没有了解过android的java程序员,也许会疑惑第一行代码。首先我告诉大家,我在做DOM解析xml的Demo的时候,是创建的android project,当然Work.xml就是存在android工程目录下assets文件夹下的,this.getResources().getAssets().open("Work.xml")就是获取assets文件夹下的Work.xml,并将其转换为流的方式读取。上面的代码到了Element element = document.getDocumentElement(),此时就已经获取到了xml的根元素了,解析其中的内容就此开始了。当然我的Demo为了遵循单个方法的代码在15-20之间,单个类的代码在400-500之间的原则,我将其解析的部分分离出单独的方法来了,现在我们看看吧!

   private void Parse(Element element) {
        /* 解析xml */
        NodeList nodeList = element.getChildNodes();
        int size = nodeList.getLength();
       
        for (int i = 0; i < size; i++) {
            Node element2 = nodeList.item(i);
            String tagName = element2.getNodeName();
            if(tagName.equals("Work")) {
                System.out.println("节点:" + tagName);
                Parse((Element)element2);
            }
            if(tagName.equals("name")) {
                System.out.println("name:" + element2.getFirstChild().getNodeValue());
            }
            if(tagName.equals("age")) {
                System.out.println("age:" + element2.getFirstChild().getNodeValue());
            }
            if(tagName.equals("salary")) {
                System.out.println("salary:" + element2.getFirstChild().getNodeValue());
            }
        }
    }

  这里传入的Element对象就是我们前面代码获取到的Element对象了。其实在xml文件中,对于每一个标签我们更习惯称之为节点,当然java语言提供了类似的概念,如NodeList(节点列表)、Node(节点)。在以上这个方法中,element.getChildNodes()这个方法获取了xml文档的所有节点列表。此时我采用了循环遍历其中所有节点的方式获取指定节点的内容。在此我需要说一下其中我在学习时遇到的一个问题,比如element2.getFirstChild().getNodeValue()与element2.getNodeValue(),如果我element2已经是xml中的深度最大了,下面已经不再有子节点了。我利用element2.getNodeValue()应该就能获取到值了啊,但是必须采用element2.getFirstChild().getNodeValue()采用办法获取到值,同行中如果有关于这个问题好的解释,分享一下吧。小弟不甚感激!好了,我的这两篇文章主要讲述了一些解析xml文件的两种方法:SAX解析法与DOM解析法。并没有涉及到XML的更新节点的内容。稍后的文章我将与大家分享一下利用java更新XML节点的内容以及java中对xml进行序列化与反序列化

你可能感兴趣的:(java,xml,android,String,文档,语言)