dom4j 是一种解析 XML 文档的开放源代码 XML 框架。dom4j下载地址

本文主要记载了一些简单的使用方法。

一、xml文件的解析

dom4j既可以解析普通的xml文件,也可以解析一个InputStream,先看看xml文件长什么样子:

<books>
<book>
<id>1</id>
<name>Java编程思想</name>
<price>80</price>
<author>张三</author>
</book>
<book>
<id>2</id>
<name>三国演义</name>
<price>30</price>
<author>罗贯中</author>
</book>
<book>
<id>3</id>
<name>红楼梦</name>
<price>35</price>
<author>曹雪芹</author>
</book>
<book>
<id>4</id>
<name>西游记</name>
<price>25</price>
<author>吴承恩</author>
</book><book>
<id>5</id>
<name>水浒传</name>
<price>30</price>
<author>施耐庵</author>
</book>
</books>

通过读取这一段xml文件并解析,将xml文件中的内容存储到javabean中。

    private List<Book> bs;
private Book b; //读取xml文件获得Document对象
@Test
public void test1(){
try {
//1.读取xml文件,获取document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
//2.获取根节点<books>
Element root = document.getRootElement();
bs = new ArrayList<Book>();
//3.迭代,获取根节点的所有子节点<book>
for (Iterator<Element> es = root.elementIterator(); es.hasNext();) {
Element e = es.next();
b = new Book();
//4.再次迭代,获取子节点的子节点<id><name><price><author>
for (Iterator<Element> e_son = e.elementIterator();e_son.hasNext();) {
Element ee = e_son.next();
if(ee.getName().equals("id")){
b.setId(Integer.parseInt(ee.getText().toString()));
}else if(ee.getName().equals("name")){
b.setName(ee.getText());
}else if(ee.getName().equals("price")){
b.setPrice(Integer.parseInt(ee.getText()));
}else if(ee.getName().equals("auhtor")){
b.setAuthor(ee.getText());
}
}
bs.add(b);
}
} catch (DocumentException e) {
e.printStackTrace();
} for (Book bk : bs) {
System.out.println(bk.getName());
}
}

Book.java

public class Book {

    private int id;
private String name;
private int price;
private String author;
private Detail detail;
private Attribute attribute; public Attribute getAttribute() {
return attribute;
}
public void setAttribute(Attribute attribute) {
this.attribute = attribute;
}
public Detail getDetail() {
return detail;
}
public void setDetail(Detail detail) {
this.detail = detail;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}

Attribute.java

public class Attribute {

    private String category;
private String edition;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getEdition() {
return edition;
}
public void setEdition(String edition) {
this.edition = edition;
} }

Detail.java

public class Detail {

    private String pressTime;
private String storyTime;
public String getPressTime() {
return pressTime;
}
public void setPressTime(String pressTime) {
this.pressTime = pressTime;
}
public String getStoryTime() {
return storyTime;
}
public void setStoryTime(String storyTime) {
this.storyTime = storyTime;
}
}

好,我们稍微修改一下xml文件,再看看个该如何解析:

<books>
<book>
<id>1</id>
<name>Java编程思想</name>
<price>80</price>
<author>张三</author>
<detail>
<pressTime>天朝</pressTime>
<storyTime>21世纪</storyTime>
</detail>
</book>
<book>
<id>2</id>
<name>三国演义</name>
<price>30</price>
<author>罗贯中</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>汉末</storyTime>
</detail>
</book>
<book>
<id>3</id>
<name>红楼梦</name>
<price>35</price>
<author>曹雪芹</author>
<detail>
<pressTime>清朝</pressTime>
<storyTime>不详</storyTime>
</detail>
</book>
<book>
<id>4</id>
<name>西游记</name>
<price>25</price>
<author>吴承恩</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>大唐</storyTime>
</detail>
</book><book>
<id>5</id>
<name>水浒传</name>
<price>30</price>
<author>施耐庵</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>大宋</storyTime>
</detail>
</book>
</books>

又多了一层嵌套,看解析方式:

    private List<Book> bs;
private Book b;
private Detail detail; // 读取xml文件获得Document对象
@Test
public void test1() {
try {
// 1.读取xml文件,获取document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
// 2.获取根节点<books>
Element root = document.getRootElement();
bs = new ArrayList<Book>();
// 3.迭代,获取根节点的所有子节点<book>
for (Iterator<Element> es = root.elementIterator(); es.hasNext();) {
Element e = es.next();
b = new Book();
// 4.再次迭代,获取子节点的子节点<id><name><price><author>
for (Iterator<Element> e_son = e.elementIterator(); e_son
.hasNext();) {
Element ee = e_son.next();
if (ee.getName().equals("id")) {
b.setId(Integer.parseInt(ee.getText().toString()));
} else if (ee.getName().equals("name")) {
b.setName(ee.getText());
} else if (ee.getName().equals("price")) {
b.setPrice(Integer.parseInt(ee.getText()));
} else if (ee.getName().equals("auhtor")) {
b.setAuthor(ee.getText());
} else if (ee.getName().equals("detail")) {
detail = new Detail();
for (Iterator<Element> ds = ee.elementIterator(); ds
.hasNext();) {
Element d = ds.next();
if (d.getName().equals("pressTime")) {
detail.setPressTime(d.getText());
} else if (d.getName().equals("storyTime")) {
detail.setStoryTime(d.getText());
}
}
b.setDetail(detail);
}
}
bs.add(b);
}
} catch (DocumentException e) {
e.printStackTrace();
} for (Book bk : bs) {
System.out.println(bk.getName()+","+bk.getDetail().getPressTime());
}
}

继续修改xml文件,为之添加属性:

<books>
<book category="编程技术" edition="8">
<id>1</id>
<name>Java编程思想</name>
<price>80</price>
<author>张三</author>
<detail>
<pressTime>天朝</pressTime>
<storyTime>21世纪</storyTime>
</detail>
</book>
<book category="历史小说" edition="1">
<id>2</id>
<name>三国演义</name>
<price>30</price>
<author>罗贯中</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>汉末</storyTime>
</detail>
</book>
<book category="小说" edition="2">
<id>3</id>
<name>红楼梦</name>
<price>35</price>
<author>曹雪芹</author>
<detail>
<pressTime>清朝</pressTime>
<storyTime>不详</storyTime>
</detail>
</book>
<book category="神话小说" edition="4">
<id>4</id>
<name>西游记</name>
<price>25</price>
<author>吴承恩</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>大唐</storyTime>
</detail>
</book>
<book category="小说" edition="5">
<id>5</id>
<name>水浒传</name>
<price>30</price>
<author>施耐庵</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>大宋</storyTime>
</detail>
</book>
</books>

给每一个book都添加了属性,又该怎么遍历呢?attribute的遍历和element的遍历非常类似,看代码:

    // 读取xml文件获得Document对象
@Test
public void test1() {
try {
// 1.读取xml文件,获取document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
// 2.获取根节点<books>
Element root = document.getRootElement();
bs = new ArrayList<Book>();
// 3.迭代,获取根节点的所有子节点<book>
for (Iterator<Element> es = root.elementIterator(); es.hasNext();) {
Element e = es.next();
b = new Book();
book_attr = new lenve.test.Attribute();
for (Iterator<Attribute> as = e.attributeIterator();as.hasNext();) {
Attribute attr = as.next();
if(attr.getName().equals("category")){
book_attr.setCategory(attr.getText());
}else if(attr.getName().equals("edition")){
book_attr.setEdition(attr.getText());
}
}
b.setAttribute(book_attr);
// 4.再次迭代,获取子节点的子节点<id><name><price><author>
for (Iterator<Element> e_son = e.elementIterator(); e_son
.hasNext();) {
Element ee = e_son.next();
if (ee.getName().equals("id")) {
b.setId(Integer.parseInt(ee.getText().toString()));
} else if (ee.getName().equals("name")) {
b.setName(ee.getText());
} else if (ee.getName().equals("price")) {
b.setPrice(Integer.parseInt(ee.getText()));
} else if (ee.getName().equals("auhtor")) {
b.setAuthor(ee.getText());
} else if (ee.getName().equals("detail")) {
detail = new Detail();
for (Iterator<Element> ds = ee.elementIterator(); ds
.hasNext();) {
Element d = ds.next();
if (d.getName().equals("pressTime")) {
detail.setPressTime(d.getText());
} else if (d.getName().equals("storyTime")) {
detail.setStoryTime(d.getText());
}
}
b.setDetail(detail);
}
}
bs.add(b);
}
} catch (DocumentException e) {
e.printStackTrace();
} for (Book bk : bs) {
System.out.println(bk.getName()+","+bk.getDetail().getPressTime()+","+bk.getAttribute().getCategory());
}
}

如果我们只想遍历某一个节点呢?比如我们只想遍历名称为id的节点,该怎么办?

    private List<Book> bs;
private Book b;
@Test
public void test2() {
try {
// 1.读取xml文件,获取document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
// 2.获取根节点<books>
Element root = document.getRootElement();
bs = new ArrayList<Book>();
// 3.迭代,获取根节点的所有子节点<book>
for (Iterator<Element> es = root.elementIterator(); es.hasNext();) {
Element e = es.next();
b = new Book();
// 4.再次迭代,获取子节点的子节点<id><name><price><author>
for (Iterator<Element> e_son = e.elementIterator("id"); e_son
.hasNext();) {
Element ee = e_son.next();
b.setId(Integer.parseInt(ee.getText().toString()));
}
bs.add(b);
}
} catch (DocumentException e) {
e.printStackTrace();
} for (Book bk : bs) {
System.out.println(bk.getId()+","+bk.getAuthor());
}
}

输出:

最后一个问题,怎样以字符串的形式拿到一个xml文件:

    @Test
public void test3(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
String text = document.asXML();
System.out.println(text);
} catch (DocumentException e) {
e.printStackTrace();
}
}

二、使用程序写一个xml文件

1.怎样把一个字符串文件写成xml文件:

    @Test
public void test4() {
try {
String text = "<fruits><fruit><name>苹果</name><color>red</color><price>3元</price></fruit></fruits>";
Document document = DocumentHelper.parseText(text);
//两种方式皆可
// FileWriter out = new FileWriter(new File("F:\\test\\str2xml.xml"));
PrintWriter out = new PrintWriter(new File("F:\\test\\s2x.xml"));
document.write(out);
out.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这样输出的xml文件没有格式,可读性较差,换个方式再看看:

    @Test
public void test5() {
try {
String text = "<fruits><fruit><name>苹果</name><color>red</color><price>3元</price></fruit></fruits>";
Document document = DocumentHelper.parseText(text);
PrintWriter out = new PrintWriter(new File("F:\\test\\s2x1.xml"));
XMLWriter writer = new XMLWriter(out, new OutputFormat().createPrettyPrint());
writer.write(document);
writer.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

输出结果:

这样的输出格式也是极好的。

2.通过程序一个元素一个元素的写入:

    @Test
public void test6(){
int res = createXMLFile();
if(res==1){
System.out.println("xml文件创建成功!");
}else{
System.out.println("xml文件创建失败!");
}
} public int createXMLFile(){
//返回0表示创建成功,返回1表示创建失败
int result = 0;
Document document = DocumentHelper.createDocument();
//建立根节点
Element root = document.addElement("fruits");
//加入注释
root.addComment("this is a xml about fruit");
Element f1 = root.addElement("fruit");
f1.addAttribute("color", "red");
Element f11 = f1.addElement("price");
f11.setText("10元");
Element f12 = f1.addElement("shape");
f12.setText("圆形");
Element f13 = f1.addElement("name");
f13.setText("苹果");
//将xml写入文件中
try {
PrintWriter out = new PrintWriter(new File("F:\\test\\111.xml"));
XMLWriter writer = new XMLWriter(out, new OutputFormat().createPrettyPrint());
writer.write(document);
writer.close();
result = 1;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

再看看新创建的xml文件长什么样:

这里使用最多的就是三个方法,一个是addElement(),一个是addAttribute(),还有一个是setText(),对每一个节点都可以执行这三个操作,你想创建的任何形状的xml都可以通过层层的嵌套实现。

如果想手动指定输出编码格式:

    @Test
public void test6(){
int res = createXMLFile();
if(res==1){
System.out.println("xml文件创建成功!");
}else{
System.out.println("xml文件创建失败!");
}
} public int createXMLFile(){
//返回0表示创建成功,返回1表示创建失败
int result = 0;
Document document = DocumentHelper.createDocument();
//建立根节点
Element root = document.addElement("fruits");
//加入注释
root.addComment("this is a xml about fruit");
Element f1 = root.addElement("fruit");
f1.addAttribute("color", "red");
Element f11 = f1.addElement("price");
f11.setText("10元");
Element f12 = f1.addElement("shape");
f12.setText("圆形");
Element f13 = f1.addElement("name");
f13.setText("苹果");
//将xml写入文件中
try {
PrintWriter out = new PrintWriter(new File("F:\\test\\111.xml"));
OutputFormat format = OutputFormat.createPrettyPrint();//缩进显示
//默认输出编码是UTF-8,可以手动设置为GBK
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(out, format);
writer.write(document);
writer.close();
result = 1;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

输出的xml文件为(注意看编码):

三、修改xml文件

我们要修改一下xml文件:

<books>
<book category="编程技术" edition="8">
<id>1</id>
<name>Java编程思想</name>
<price>80</price>
<author>张三</author>
<detail>
<pressTime>天朝</pressTime>
<storyTime>21世纪</storyTime>
</detail>
</book>
<book category="历史小说" edition="1">
<id>2</id>
<name>三国演义</name>
<price>30</price>
<author>罗贯中</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>汉末</storyTime>
</detail>
</book>
<book category="小说" edition="2">
<id>3</id>
<name>红楼梦</name>
<price>35</price>
<author>曹雪芹</author>
<detail>
<pressTime>清朝</pressTime>
<storyTime>不详</storyTime>
</detail>
</book>
<book category="神话小说" edition="4">
<id>4</id>
<name>西游记</name>
<price>25</price>
<author>吴承恩</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>大唐</storyTime>
</detail>
</book>
<book category="小说" edition="5">
<id>5</id>
<name>水浒传</name>
<price>30</price>
<author>施耐庵</author>
<detail>
<pressTime>明朝</pressTime>
<storyTime>大宋</storyTime>
</detail>
</book>
</books>

1.把所有的edition属性的值为8的修改为100

使用xpath查找对象时,依赖于jaxen.jar包,所以要先下载这个包。查找对象时,如果查找的是节点,直接写名称,如:/books/book/name,如果查找的是属性,要在属性前加上@,如:/books/book/@edition

    @Test
public void modifyXmlFile(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
//先利用xpath查找对象
List<Node> ns = document.selectNodes("/books/book/@edition");
Iterator<Node> iter = ns.iterator();
while(iter.hasNext()){
Attribute attr = (Attribute) iter.next();
if(Integer.parseInt(attr.getValue())==8){
attr.setValue("100");
}
}
//输出修改后的文件
PrintWriter out = new PrintWriter(new File("F:\\test\\m1.xml"));
XMLWriter w = new XMLWriter(out,OutputFormat.createPrettyPrint());
w.write(document);
w.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

2.把“Java编程思想”修改为“Java语言程序设计”并在该name属性所在的book节点中添加buyTime节点,节点值为2015-04-27:

    @Test
public void modifyXmlFile(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
//先利用xpath查找对象
List<Node> ns = document.selectNodes("/books/book/name");
Iterator<Node> iter = ns.iterator();
while(iter.hasNext()){
Element e = (Element) iter.next();
if(e.getText().equals("Java编程思想")){
e.setText("Java语言程序设计");
Element pe = e.getParent();
Element new_e = pe.addElement("buyTime");
new_e.setText("2015-04-27");
}
}
//输出修改后的文件
PrintWriter out = new PrintWriter(new File("F:\\test\\m2.xml"));
XMLWriter w = new XMLWriter(out,OutputFormat.createPrettyPrint());
w.write(document);
w.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

3.若edition属性值为8,则删除该属性

    @Test
public void modifyXmlFile(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
List<Node> ns = document.selectNodes("/books/book/@edition");
Iterator<Node> iter = ns.iterator();
while(iter.hasNext()){
Attribute attr = (Attribute) iter.next();
if(Integer.parseInt(attr.getValue())==8){
attr.getParent().remove(attr);
}
}
try {
PrintWriter out = new PrintWriter(new File("F:\\test\\m3.xml"));
XMLWriter w = new XMLWriter(out,OutputFormat.createPrettyPrint());
w.write(document);
w.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } catch (DocumentException e) {
e.printStackTrace();
}
}

4.把id为3的书的name节点删除:

@Test
public void modifyXmlFile(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
List<Node> ns = document.selectNodes("/books/book/id");
Iterator<Node> iter = ns.iterator();
while(iter.hasNext()){
Element e = (Element) iter.next();
if(e.getText().equals("3")){
e.getParent().remove(e.getParent().element("name"));
}
}
PrintWriter out = new PrintWriter(new File("F:\\test\\m4.xml"));
XMLWriter w = new XMLWriter(out, OutputFormat.createPrettyPrint());
w.write(document);
w.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }

5.移除所有文件的id属性:

方式一:

直接查找id节点,再删除

    @Test
public void modifyXmlFile(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
List<Node> ns = document.selectNodes("/books/book/id");
Iterator<Node> iter = ns.iterator();
while(iter.hasNext()){
Element e = (Element) iter.next();
e.getParent().remove(e);
}
PrintWriter out = new PrintWriter(new File("F:\\test\\m5.xml"));
XMLWriter w = new XMLWriter(out,OutputFormat.createPrettyPrint());
w.write(document);
w.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

方法二:

查找book节点,再删除book节点的id节点:

    @Test
public void modifyXmlFile(){
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("F:\\test\\books.xml"));
List<Node> ns = document.selectNodes("/books/book");
Iterator<Node> iter = ns.iterator();
while(iter.hasNext()){
Element e = (Element) iter.next();
e.remove(e.element("id"));
}
PrintWriter out = new PrintWriter(new File("F:\\test\\m6.xml"));
XMLWriter w = new XMLWriter(out,OutputFormat.createPrettyPrint());
w.write(document);
w.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

好了,先写这么多,这些东东基本上够项目使用了。

Dom4j 学习笔记的更多相关文章

  1. Dom4j学习笔记

    一.Loading XML Data 以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象.一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行 ...

  2. JAVA中 XML与数据库互转 学习笔记三

    要求 必备知识 JAVA基础知识,XML基础知识,数据库的基本操作. 开发环境 MyEclipse10/MySql5.5 资料下载 源码下载   数据库在数据查询,修改,保存,安全等方面与其他数据处理 ...

  3. java maven、springmvc、mybatis 搭建简单Web项目学习笔记

    前言: 空余的时间,学学 Java,没准哪天用的到: 环境搭建折腾了好几天,总算搞顺了,也做个学习笔记,以防后面会忘记: 一.安装文件及介绍 JDK:jdk1.8.0 77 eclipse-maven ...

  4. 【转载】Java学习笔记

    转载:博主主页 博主的其他笔记汇总 : 学习数据结构与算法,学习笔记会持续更新: <恋上数据结构与算法> 学习Java虚拟机,学习笔记会持续更新: <Java虚拟机> 学习Ja ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. hdu4432 Sum of divisors(数论)

    Sum of divisors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. ERP 推式 拉式 工序拉式 装配拉式 倒冲

    ERP 推式  拉式  工序拉式   装配拉式   倒冲 以上為生产订单(wip)中的原料供应方式,最常用的有Pull和Push. PULL即拉动方式: 拉式生产是生产为主,原材料是由专门的配送人员按 ...

  3. 从零开始学习jQuery (九) jQuery工具函数

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 我们经常要使用脚本处理各种业务逻辑, 最常见的就 ...

  4. import project后,出现Unable to get system library for the project

    import project 后,出现Unable to get system library for the project. 这是因为在import 一个项目的时候,没有指定android sdk ...

  5. HDU-5414 CRB and String

    http://acm.hdu.edu.cn/showproblem.php?pid=5414 题意:给定字符串s和t,可以在s里面选一个字符c,然后任选一个字符d(d!=c)将d插入到c的后面,问能不 ...

  6. SQL Server 2008如何进行数据库同步?

    复制有三种类:事务复制.快照复制.合并复制.事务复制是将复制启用后的所有发布服务器上发布的内容在修改时传给订阅服务器,数据更改将按照其在发布服务 器上发生的顺序和事务边界,应用于订阅服务器,在发布内部 ...

  7. classLoader (一)

    不说废话,上代码吧. 随便写一个类,他是由appclassLoader加载的 package classLoaderExample; class Bean { public void test() { ...

  8. 解决 MyEclipse 10 中 JSp页面 “return false” 报错问题

    1.MyEclipse ->. Preferences 2.validation ->>找到JavaScript validator for Js files  builder 下面 ...

  9. Esper系列(十一)NamedWindow语法Merge、Queries、Indexing、Dropping

    On-Merge With Named Windows 功能:对window中的insert.update.delete操作进行组合运用. 格式: 1  "; 14      15  Sys ...

  10. Hadoop学习记录(2)|HDFS shell命令|体系结构

    HDFS的shell 调用文件系统(FS)shell命令使用hadoop fs的形式 所有的FS shell命令使用URI路径作为参数. URI格式是scheme://authority/path.H ...