zoukankan      html  css  js  c++  java
  • xml DOM解析

    DOM解析方法:必不可少的五句话,剩下的就是根据自己的要求来写了。

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    //取得DocumentBuilderFactory实例
    DocumentBuilder builder = factory.newDocumentBuilder();    //从factory获取DocumentBuilder实例
    InputStream is = getAssets().open("DevInfoRequest.xml");
    Document doc = builder.parse(is);    //解析输入流 得到Document实例
    Element rootElement = doc.getDocumentElement();//得到根节点

    XML文档:

    <?xml version="1.0" ?>
    <book>
        <author>wyq</author>
        <page>90</page>
        <font color = "red">word</font>
    </book>

    以上面的xml文档为例来说明。

    1、String rootName = doc.getDocumentElement().getNodeName()  得到的根节点是"book";

    2、int len = rootElement.getChildNodes().getLength(); 得到的长度是7

        打印之:for(int i=0;i<len;i++){
                     Node n = rootElement.getChildNodes().item(i);   Log.d("nodeName",n.getNodeName(););}

        分别是#text,  author,       #text,              page,     #text,           font,     #text。

        对应      ?  ,  <author>  </author>       <page>   </page>        <font>     </font>

        但是,第一个#text代表什么了? 我们用rootElement.getFirstChild().getNodeName()看看,打印出#text,不懂?

        注意:取节点名,要用getNodeName(),不能用getLocalName()。

    3、想取出某个元素的文本内容,如<author>wyq</author>,取出wyq。

       if(nodeName=="author"){ n.getTextContent();   //值为wyq}

        注意:不可用getNodeValue(),它取出来的值为null

    4、想取出某个元素的属性,如<font color = "red">word</font>,取出red

       Element e =(Element)rootElement.getElementsByTagName("font").item(0);
      e.getAttribute("color");              //值为red

    5、想为元素赋值,同上,有相应的set方法。

     

    再举一例,此例中有xml嵌套定义

    <?xml version="1.0" ?>
    <Message Version="1">
        <Header>
            <get_node_info domain_name="m20121716.dddns.org" ></get_node_info>
        </Header>
    </Message>

    我们利用

    int len = rootElement.getChildNodes().getLength();
      Log.d("len","len is "+len);  //结果为3

      for(int i=0;i<len;i++){
       Node n = rootElement.getChildNodes().item(i);
       String nodeName = n.getNodeName();
       Log.d("nodeName",nodeName);
      }

    结果为:#text,     Header,       #text

    对应:   ?        <Header>   </Header>

    可以看出,并没有遍历到get_node_info这个节点,可见,getChildNodes()只是得到它的直接子节点。

    1、想要取得get_node_info的属性值,直接用

         Element e =(Element)rootElement.getElementsByTagName("get_node_info").item(0);
         a=e.getAttribute("domain_name");

        并不需要遍历到这个节点,可以直接查找。

    2、更改属性

      e.setAttribute("domain_name", "nice");

      再用e.getAttribute("domain_name");取出来打印看,已经修改成功了,打印为"nice"

      

  • 相关阅读:
    ms4w php配置xdebug
    转载: js 调用父窗口函数-iframe父窗口和子窗口相互的调用方法
    禁止apache列出站内目录
    块元素和行内元素之间的转换,overflow与visibility
    float浮动定位
    绝对定位和固定定位
    相对定位
    边框样式的设置
    div盒子模型
    CSS修饰表格
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/3120835.html
Copyright © 2011-2022 走看看