Java解析XML

<?xml version="1.0"?> 
<sonnet type="Shakespearean"> 
<author> 
<last-name>Shakespeare</last-name> 
<first-name>William</first-name> 
<nationality>British</nationality> 
<year-of-birth>1564</year-of-birth> 
<year-of-death>1616</year-of-death> 
</author> 
<title>Sonnet130</title> 
<lines> 
<line>Mymistress?eyesare... 

处理DOM树 

现在解析已经完成,我们将遍历DOM树。注意这段代码是递归的。对每个节点,我们处理其本身,然后我们对每个节点的子女递归地调用printDOMTree方法。递归调用如左所示。 

要记住当有些XML文档非常大时,它们反而不会有太多层标记。以一个上海市的电话簿为例,可能有几百万条记录,但其标记可能不会超过几层。考虑到这个原因,递归算法的栈溢出不是一个问题。 

public void printDOMTree(Nodenode) 

intnodeType=Node.getNodeType(); 
switch(nodeType) 

caseDOCUMENT_NODE: 
printDOMTree(((Document)node). 
GetDocumentElement()); 
... 
caseELEMENT_NODE: 
... 
NodeListchildren= node.getChildNodes(); 
if(children!=null) 

for(inti=0; i< children.getLength(); i++) 
printDOMTree(children.item(i)); 

domCounter.java 
这段代码解析一个 XML 文档,然后遍历 DOM 树来采集有关该文档的数据。当数据采集后将其输出到标准输出。 

很多 Node 
如果您查看 sonnet.xml,有二十四个节点。您可能认为这意味着二十四个节点。然而,这不正确。在 sonnet.xml 中一共有 69 个节点;一个文档节点(document node), 23 个元素节点(element node)以及 45 个文本节点(text node)。我们运行 java domCounter sonnet.xml 就获得了下边所示的结果。 
统计 sonnet.xml 的数据: 
==================================== 
Document Nodes: 1 
Element Nodes: 23 
Entity Reference Nodes: 0 
CDATA Sections: 0 
Text Nodes: 45 
Processing Instructions: 0 
---------- 
Total: 69 Nodes 


节点列表示例:
对于下边的片断, 
<sonnet type="Shakespearean"> 
<author> 
<last-name>Shakespeare</last-name> 
下列是从解析器返回的节点: 
Document节点
Element节点对应于<sonnet>标记 
一个Text节点对应于<sonnet>节点后的回车符以及<author>标记前的两个空格符 
Element节点对应于<author>标记 
一个Text节点对应于<author>节点后的回车符以及<last-name>标记前的四个空格符 
Element节点对应于<last-name>标记 

所有那些文本节点 
如果您查看由解析器返回的所有节点列表,您将发现它们大多数是没用的。在每行开始的空格符组成其中包含可忽略的Text节点。注意如果您将所有的节点放在一行上我们就不会得到这些无用的节点了。我们通过添加分行符和空格符来提高文档的可读性。当您构建一个XML文档时不需要考虑可读性,就可省略分行符和空格符。这可使得您的文档更小,处理您的文档时也不需要构建那些无用的节点。 

<sonnet type="Shakespearean"> 
<author> 
<last-name>Shakespeare</last-name> 
<first-name>William</first-name> 
<nationality>British</nationality> 
<year-of-birth>1564</year-of-birth> 
<year-of-death>1616</year-of-death> 
</author> 
<title>Sonnet130</title> 
<lines> 
<line>Mymistress'eyesarenothinglikethesun,</line> 
一个Text节点对应于"Shakespeare"字符 
如果您看到标记间所有的空格符,您可发现为何我们有那么多超出您想像的节点。 

了解您的Node 
我们最后对处理在DOM树的Node要指出的是,我们在处理其之前要检查每个Node的类型。一些方法,例如getAttributes,对一些特定的节点类型返回null值。如果您不检查节点类型,您将得到不正确的结果(最佳情况)和异常(最差情况)。 

在此所介绍的switch语句常出现在使用DOM解析器的代码。 
switch(nodeType) 

caseNode.DOCUMENT_NODE: 
... 
caseNode.ELEMENT_NODE: 
... 
caseNode.TEXT_NODE: 
... 


总结 
不管您信不信,这就是我们使用DOM对象所要了解的所有内容。我们的domOne代码完成了下列工作: 
创建一个Parser对象 
将一个XML文档传递给Parser来解析 
获得来自于Parser的Document对象然后加以检查。 
在本教程最后一章,我们将讨论如何不需要XML原文件来构建一棵DOM树,并展示如何对一个XML文档中的元素排序。而那些都是基于我们这里所讨论的概念之上。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值