JDOM入门:使用JDOM解析XML

CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi) 环境:visual studio2015、python3.9、 参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可: 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。 通过Swig得到pyth. 阅读详情
在 JDOM 中,XML元素就是 Element 的实例,XML属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。
因为 JDOM 对象就是像 Document、Element 和 Attribute 这些类的直接实例,因此创建一个新JDOM 对象就如在 Java 语言中使用 new 操作符一样容易。JDOM 的使用是直截了当的。

    JDOM 使用标准的 Java 编码模式。只要有可能,它使用 Java new 操作符而不故弄玄虚使用复杂的工厂化模式,使对象操作即便对于初学用户也很方便。

本文分两步对JDOM的应用加以介绍:XML创建和XML解析

一、XML文档创建
   我们由零开始利用JDOM生成一个XML文档。最后的结果(样本文档)看起来象这样:
<?xml version="1.0" encoding="UTF-8"?>
<MyInfo comment="introduce myself">
  <name>kingwong</name>
  <sex value="male"/>
  <contact>
    <telephone>87654321</telephone>
  </contact>
</MyInfo>

1.以 MyInfo 为根元素创建文档
  Element rootElement = new Element("MyInfo");
   //所有的XML元素都是 Element 的实例。根元素也不例外
 Document myDocument = new Document(rootElement);   //以根元素作为参数创建Document对象。
   一个Document只有一个根,即root元素。

2.给根元素添加属性
  Attribute rootAttri = new Attribute("comment","introduce myself");//创建名为 commnet,值为 introduce myself 的属性。
  rootElement.setAttribute(rootAttri);//将刚创建的属性添加到根元素。
  这两行代码你也可以合成一行来写,象这样:
  rootElement.setAttribute(new Attribute("comment","introduce myself"));
或者
  rootElement.setAttribute("comment","introduce myself");

3.添加元素和子元素
  JDOM里子元素是作为 content(内容)添加到父元素里面去的,所谓content就是类似上面样本文档中<name></name>之间的东东,即kingwong。罗嗦了点是吧:)
  Element nameElement = new Element("name");//创建 name 元素
  nameElement.addContent("kingwong");//将kingwong作为content添加到name元素
  rootElement.addContent(nameElement);//将name元素作为content添加到根元素

这三行你也可以合为一句,象这样:
  rootElement.addContent((Content)(new Element("name").addContent("kingwong")));
因为addContent(Content child)方法返回的是一个Parent接口,而Element类同时继承了Content类和实现了Parent接口,所以我们把它造型成Content。

我们用同样的方法添加带属性的子元素<sex value="male"/>
  rootElement.addContent(new Element("sex").setAttribute("value","male"));

同样的,我们添加<contract />元素到根元素下,用法上一样,只是稍微复杂了一些:
rootElement.addContent((Content)(new Element("contact").addContent((Content)(new Element("telephone").addContent("87654321")))));
如果你对这种简写形式还不太习惯,你完全可以分步来做,就象本节刚开始的时候一样。事实上如果层次比较多,写成分步的形式更清晰些,也不容易出错。

4.删除子元素
这个操作比较简单:
rootElement.removeChild("sex");//该方法返回一个布尔值

  到目前为止,我们学习了一下JDOM文档生成操作。上面建立了一个样本文档,可是我们怎么知道对不对呢?因此需要输出来看一下。我们将JDOM生成的文档输出到控制台,使用 JDOM 的 XMLOutputter 类。
5. 将 JDOM 转化为 XML 文本
XMLOutputter xmlOut = new XMLOutputter(" ",true);
try {
    xmlOut.output(myDocument,System.out);
} catch (IOException e) {
    e.printStackTrace();
}
XMLOutputter 有几个格式选项。这里我们已指定希望子元素从父元素缩进两个空格,并且希望元素间有空行。

  new XMLOutputter(java.lang.String indent, boolean newlines)这个方法在最新版本中已经不建议使用。JDOM有一个专门的用来定义格式化输出的类:org.jdom.output.Format,如果你没有特殊的要求,有时候使用里面的几个静态方法(应该可以说是预定义格式)如 getPrettyFormat()就可以了。我们把上面的输出格式稍微改一下,就象这样:

XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());

6.将JDOM文档转化为其他形式
XMLOutputter 还可输出到 Writer 或 OutputStream。为了输出JDOM文档到一个文本文件,我们可以这样做:
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();

XMLOutputter 还可输出到字符串,以便程序后面进行再处理:
Strng outString = xmlOut.outputString(myDocument);

当然,在输出的时候你不一定要输出所有的整个文档,你可以选择元素进行输出:
xmlOut.output(rootElement.getChild("name"),System.out);
一句话,JDOM非常灵活方便!如果你想进一步研究JDOM,请到官方网站去看一看: http://www.jdom.org

本节示例源码:
package com.cyberobject.study;

import java.io.IOException;

import org.jdom.Attribute;
import org.jdom.Content;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
* @author kingwong
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestJDOM {

public static void main(String[] args)
{
Element rootElement = new Element("MyInfo");
Document myDocument = new Document(rootElement);

// Attribute rootAttri = new Attribute("comment","introduce myself");
// rootElement.setAttribute(rootAttri);

rootElement.setAttribute("comment","introduce myself");
//rootElement.setAttribute(new Attribute("comment","introduce myself"));
// Element sexElement = new Element("sex");
// rootElement.addContent(sexElement);

// Element nameElement = new Element("name");
// nameElement.addContent("kingwong");
// rootElement.addContent(nameElement);

rootElement.addContent((Content)(new Element("name").addContent("kingwong")));
rootElement.addContent(new Element("sex").setAttribute("value","male"));
rootElement.addContent((Content)(new Element("contract").addContent((Content)(new Element("telephone").addContent("87654321")))));

rootElement.removeChild("sex");

XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
try {
  xmlOut.output(myDocument,System.out);
  //xmlOut.output(rootElement.getChild("name"),System.out);
  //String outString = xmlOut.outputString(myDocument);
} catch (IOException e) {
   e.printStackTrace();
}
}
}


二、XML文档解析
JDOM 不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。
JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。由于我们经常要从一个文件里读取数据,因此我们应该采用后者作为解析工具。

解析一个xml文档,基本可以看成以下几个步骤:
1.实例化一个合适的解析器对象
本例中我们使用SAXBuilder:
SAXBuilder sb = new SAXBuilder();
2.以包含XML数据的文件为参数,构建一个文档对象myDocument
Document myDocument = sb.build(/some/directory/myFile.xml);
3.获到根元素
Element rootElement = myDocument.getRootElement();

   一旦你获取了根元素,你就可以很方便地对它下面的子元素进行操作了,下面对Element对象的一些常用方法作一下简单说明:
getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。
getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。
getChildText("childname") 返回指定子节点的内容文本值。
getText() 返回该元素的内容文本值。

还有其他没有罗列出来的方法,如果需要的话,可以随时查阅JDOM的在线文档:http://www.jdom.org/docs/apidocs/index.html。当然你可以在你需要的地方添加、删除元素操作,还记得上面的创建XML的方法吗?呵呵~~~

  学习新东东还是从实例学起最为快捷,下面简单举个例子,就以上面的XML样本代码来学习JDOM的XML解析。本例中读取了样本XML文件里一些属性和content,最后我们还在contact元素里插入了一个新元素<email value="wanghua@cyberobject.com" />。尽管我们实现了对于XML的基本操作,细心的朋友可能会 有疑问:如果XML文档的层次稍微复杂一些,如果嵌套多达几十上百层的话(开个玩笑),如果靠这样从根元素一级一级地通过getChild("childname")来访问子元素的话,将会非常痛苦!是的,的确是这样,但是我们有另一个有力的工具XPath,为什么不用呢?这是后话!先卖个关子(手敲累啦,下回吧,呵呵)。

/*
 * Created on 2004-8-21
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.cyberobject.study;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**
 * @author kingwong
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class TestJDOM2 {
 public static void main(String[] args){
 SAXBuilder sb = new SAXBuilder();
    try
    {        
     Document doc = sb.build("myFile.xml");
  Element root = doc.getRootElement();
  String str1 = root.getAttributeValue("comment");
  System.out.println("Root Element's comment attribute is : " + str1);
  String str2 = root.getChild("sex").getAttributeValue("value");
  System.out.println("sex Element's value attribute is : " + str2);
  String str3 = root.getChildText("name");
  System.out.println("name Element's content is :" + str3);
  String str4 = root.getChild("contact").getChildText("telephone");
  System.out.println("contact Element's telephone subelement content is : " + str4 + "/n");
  Element inputElement = root.getChild("contact"); 
  inputElement.addContent(new Element("email").setAttribute("value","wanghua@cyberobject.com"));
  XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
     String outStr = xmlOut.outputString(root);
     System.out.println(outStr);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
}
 
C# .NET6 TesseractOCR 图片文字识别 在你的项目中的tessdata-main文件夹找到这几个文件,并右键->属性设置为【如果较新则复制】有几个需要用到的模型,需要生成的时候复制到输出目录中,在项目中设置即可。TesseractOCR兼容 x86 与 x64。附 :ImageUtils.RegionCropping()源码。Visual Studio 2022 社区版。下载完成后解压在你的项目中,如图所示。从官方项目中获取模型数据, 网址为。 阅读详情

相关推荐

【论文翻译】VIT:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

VIT摘要介绍相关工作模型VISION TRANSFORMER (VIT)微调和高分辨率实验结论 摘要 虽然Transformer架构在自然语言处理任务中已经成为事实标准,但是它在计算机视觉领域的应用仍然受限。在视觉领域,注意力要么和卷积网络结合使用,要么替换卷积网络中的某些部分,同时保持整体结构不变。本文表明对CNNs的依赖不是必要的,纯转换器(pure transformer)直接应用于图像块(image patches)序列在图像分类任务中能发挥很好的作用。当对大量数据进行预训练并把它转移到多个中型或

栗子菜菜 1846

JDOM 介绍及使用指南1

JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序。它的设计包含Java语言的语法乃至语义。JDOM是两位著名的Java开发人员兼作者,BrettMclaughlin和JasonHunter的创作成果,2000年初在类似于Apache协议的许可下,JDOM作为一个开放源代码项目正式开始研发,JDOM作为一个开放源代码项目正式开始了。它已成长为包含来自广泛的Java开发人员的投稿、集中反馈及错误修复的系统,并致力于建立一个完整的基于Java平台的解决方案,通过Java代码来访问、操作并输

MRmaomaochong的专栏 1080

芋道前后端分离项目跳过登录

在此页面中可以看到当在没有获取到token时,如果此页面在白名单中则直接进入,所以我们将刚刚配置在。在此路径下配置需要跳过登录的页面路径,记住path中编辑的名称。根据以上两图可以发现芋道的。将所有需要跳过登录的方法。,否则会提示登录状态过期。至此完成免登录进入页面。

FanZaiYo的博客 5486

JDOM操作XML

一、配置环境在http://www.jdom.org 下载jdom-X.X.zip包(目前最新的为jdom-1.1.zip),解压后进入build文件夹将看到一个名为jdom.jar的包,这个就是jdom的类包了,将它加到你的classpath里即可。二、源代码package com.xml;import java.io.File;import java.io.Fi

GavinPan的专栏 1270

Frida三层次钩子快速逆向VMP+OLLVM加固APK

VMP(虚拟机保护)和OLLVM(控制流平坦化)是Android应用常见的双重混淆技术,其核心原理是将Java逻辑虚拟化、Native代码控制流打散,从而阻断传统静态分析与简单Hook。但任何混淆都必须在CPU上执行,因此必然暴露JNI注册行为、ABI参数传递规律及系统调用痕迹。基于此,Frida可通过跨层联动——从JNI_OnLoad捕获Native库加载、在VMP解释器入口截获字节码上下文、于关键系统调用(如read/gettimeofday)反向追踪数据流——构建可观测、可复现的动态分析链。该方法无需

weixin_30888413的博客 1002

多电平双向DC/DC直流变换器的工作原理(以三电平为例子)

多电平双向DCDC变换器的工作原理一、所用论文和参考文献1.1 主要是中文的文献二、工作原理和重要概念2.1 飞跨电容的作用2.2 三电平的工作原理1.3 多电平的优点二,一些注意点2.1 电感电流的变化2.2 多飞跨电容 多余三个电平的时候的解释(截图居多) 一、所用论文和参考文献 1.1 主要是中文的文献 用于超级电容储能系统的三电平双向直流变换器及其控制 (期刊) 多电平直流变换器及其控制...

qq_32419593的博客 2万+

NY8A053E 例程 之 PWM Ouput

更多关于NY8A053E的相关例程请留言!

倪彬笑阳的博客 2924

使用JDOM解析XML

 最近的工作常常要和XML格式的文档或字符串打交道,发现用JDOM来做真是方便。可以实现XML应用程序的快速开发。    在 JDOM 中,XML元素就是 Element 的实例,XML属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。因为 JDOM 对象就是像 Document、Element 和 Attribute 这些类的直接实例,因此创建一个新JDO

宏轩JAVA技术专栏 1130

ESP32-S3驱动OV3660摄像头原理图设计,已量产

本文重点拆四条主线:多来源输入电源如何收敛到 3V3,摄像头三路供电如何拆分,ESP32-S3 如何接住 DVP 数据流与外部存储,以及音频/补光/传感外围怎样挂到主控边上。至于最终图像帧率、算法策略和软件时序,当前原理图未体现。

不脱发的程序猿 981

jdom解析xml

这次把代码整理了一下,打包发上来了,程序中需要用到的jar包也一起打在里面了,有兴趣的朋友可以解压后直接导入的eclipse里运行!       xml是一种广为使用的可扩展标记语言,java中解析xml的方式有很多,最常用的像jdom、dom4j、sax等等。前两天刚好有个程序需要解析xml,就学了下jdom,写了个小例子,这里做个学习笔记。       要使用jdom解析xml文件,需...

why 211

【后量子密码】SPHINCS+ 算法(二):签名与验签(附源码分析)

本节介绍SPHINCS+ 算法的密钥生成、签名与验签。nnn:安全参数;www:Winternitz参数,WOTS+签名分解的基底;hhh:超树的高度;ddd:超树中子树的层数;kkk:FORS 树的数量;ttt:FORS 树的叶子节点数。

听雨草堂 4680

JDOM入门:使用JDOM解析XML(转)

使用JDOM解析XML一、前言    JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。    DOM适合于当今流行的各种语言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了为HTML和XML文档提

a651944226的专栏 639

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java提高篇(45)--Java解析XML汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] 【目录】 一、【基础知识——扫盲】 二、【DOM、SAX、JDOM、DOM4j简单使用介绍】 三、【性能测试】 四、【对比】 五、【小插曲XPath】 六、【补充】 关键字:Java解析xml、解析xml四种方法、DOM、SAX、JDOM、DOM4j、XPath 【引

huangyangquan的博客 517

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java jdom 删除节点_【java开发系列】— JDOM创建、修改、删除、读取XML文件

有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。创建XML文档XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点。而每个子元素都是一个Element对象,对象可以向下包含。1 因此我们可以通过先创建元素再将元素添加到父元素中,最后将顶层元素添加到根元素中。2创建完文档元素后,就可以把元素添加到document对象中,然后写入文件。主要使用的函数:...

weixin_28740299的博客 279

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java JDOM生成和解析XML

JDOM 使用:需要下载jdom对应的jar引入 场景:需要知道整个文档结构是,比dom性能好 优点:解析的树形结构操作比较灵活,比较简便 JDOM常用类 Document:表示整个xml文档,是一个树形结构 Eelment:表示一个xml的元素,提供方法操作其子元素,它的文本,属性和名称空间 Attribute:表示元素的属性 Text:表示xml文本信息 JDOM生成xml ...

p812438109的专栏 1万+

Jdom解析多层xml文件

Jdom解析多层xml文件 一、Jdom简介: JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。     JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。 在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档

md_shmily92的专栏 1724

Java如何使用JDOM解析XML呢?

Java使用JDOM解析XML的方法分享

qq_25073223的博客 635

使用JDOM解析XML文件(JDOM解析)

首先去下载个JDOM的jar包,以下两个网站选一个吧,下载后导入项目 http://www.jdom.org/docs/apidocs/index.html www.jdom.org 实现过程如下: 我的XML文件命名变a.xml,假如其内容如下: 我的实现代码如下: import java.io.File; import java.io.IOException; im

小询的博客 918

xml的Jdom解析过程详解

JDOM与DOM类似,也是一组用于解析XML的API,它本身不是一个解析器,默认的它内置了Apache的Xerces解析器;JDOM与DOM不同的是,DOM是跨语言的一套API,Java世界中有很多DOM的解析器,同样的.Net中也一样内置了DOM的实现,但是JDOM是专门为Java打造的一批API,JDOM采用了Java中的Collection架构来封装集合,是Java爱好者更加熟悉的模式。

coolwzjcool的专栏 2117
上一篇: 架构学习之MVC
下一篇: Java NIO API详解
kevin_long
博客等级 码龄20年 30粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值