龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

对比分析json及XML(5)

时间:2014-12-03 03:00来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: note 接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body): 复制代码 代码如下: toGeorge/to fromJohn/from headingReminder/heading bodyDon't

复制代码 代码如下:

<note>

  接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):

复制代码 代码如下:

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>

  最后一行定义根元素的结尾:

复制代码 代码如下:

</note>

  从本例可以设想,该XML文档包含了John给George的一张便签。

XML具有出色的自我描述性,你同意吗?
XML文档形成一种树结构
XML文档必须包含根元素。该元素是所有其他元素的父元素。
XML文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
  所有元素均可拥有子元素:

复制代码 代码如下:

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

  父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。

  所有元素均可拥有文本内容和属性(类似HTML中)。

 1.6 XML DOM

  想到这里,大家都有点迫不及待了,XML 文件到底如何解析呢?

  但是,别急,让子弹先飞会儿:–)

  在XML解析之前,我们必须系统性的学习一下 XML DOM 知识:

  1.6.1 定义

  XML DOM(XML Document Object Model) 定义了访问和操作XML文档的标准方法。

  DOM把XML文档作为树结构来查看。能够通过DOM树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。

  XML DOM是:

用于XML的标准对象模型
用于XML的标准编程接口
中立于平台和语言
W3C的标准
  XML DOM定义了所有XML元素的对象和属性,以及访问它们的方法(接口)。

  换句话说:

XML DOM是用于获取、更改、添加或删除XML元素的标准
  DOM将XML文档作为一个树形结构,而树叶被定义为节点。

  1.6.2 总结

  XML DOM其实比较复杂,在这么短的篇幅里也无法一一进行讲解。想详细了解XML DOM可以好好去学习下

 1.7 XML如何解析?

  上面讲了这么多关于XML的东西,那么XML文件应该如何解析呢?

  终于到了我们的重头戏了

  下面以视频项目为例,展示如何解析XML文件:

  1.7.1 Step 1

  XML文件是一棵树,首先需要找到对应的节点,然后从节点开始解析,比如搜索找到的就是result/weights/weight 和result/weights/weight 2个节点,分别从这个开始解析:

复制代码 代码如下:

public ResultInfo onParser(Element rootElement) {
    int resp = -1;
    try {
        String elName = "header/respcode";
        resp = Integer.parseInt(selectNodeString(rootElement, elName));
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
    Log.d(TAG, "resp= " + resp);
    if (resp != 0) {
        return null;
    }
    ResultInfo searchResultInfo = new ResultInfo();
    // Parse Search Weight
    @SuppressWarnings("rawtypes")
    final List weights = rootElement.selectNodes(rootElement.getPath() + "/"
            + "result/weights/weight");
    ResultInfo[] resultFilterInfos = parseVideos(weights);
    if (resultFilterInfos != null) {
        ResultInfo weight = new ResultInfo();
        weight.putResultInfoArray(ResultInfo.KEY_VIDEOS, resultFilterInfos);
        searchResultInfo.putResultInfo(ResultInfo.KEY_WEIGHT, weight);
    }
    // Parse Albums
    @SuppressWarnings("rawtypes")
    final List albums = rootElement.selectNodes(rootElement.getPath() + "/"
            + "result/albums/album");
    ResultInfo[] resultInfos = parseVideos(albums);
    if (resultInfos != null) {
        ResultInfo album = new ResultInfo();
        album.putResultInfoArray(ResultInfo.KEY_VIDEOS, resultInfos);
        searchResultInfo.putResultInfo(ResultInfo.KEY_SEARCH, album);
    }
    return searchResultInfo;
}

  1.7.2 Step 2

  找到了对应的Node,即从对应的Node开始递归的查找,直到找到最小的节点,也就是最基本的单元Element。再对每一个Element进行解析:

精彩图集

赞助商链接