如何使用jaxb向xml中追加数据元素

如何使用jaxb向xml中追加数据元素,第1张

* 利用dom4j进行xml文档的写入 *** 作

*/

public void createXml(File file) {

// XML 声明 <?xml version="1.0" encoding="UTF-8"?>自动添加到 XML文档中

// 使用DocumentHelper类创建文档实例(生成 XML文档节点的 dom4j API工厂类)

Document document = DocumentHelper.createDocument()

// 使用addElement()方法创建根元素 employees(用于向 XML 文档中增加元素)

Element root = document.addElement("employees")

// 在根元素中使用 addComment()方法添加注释"An XML Note"

root.addComment("An XML Note")

// 在根元素中使用 addProcessingInstruction()方法增加一个处理指令

root.addProcessingInstruction("target", "text")

// 在根元素中使用 addElement()方法增加employee元素。

Element empElem = root.addElement("employee")

// 使用 addAttribute()方法向employee元素添加id和name属性

empElem.addAttribute("id", "0001")

empElem.addAttribute("name", "wanglp")

// 向employee元素中添加sex元素

Element sexElem = empElem.addElement("sex")

// 使用setText()方法设置sex元素的文本

sexElem.setText("m")

// 在employee元素中增加age元素 并设置该元素的文本。

Element ageElem = empElem.addElement("age")

ageElem.setText("25")

// 在根元素中使用 addElement()方法增加employee元素。

Element emp2Elem = root.addElement("employee")

// 使用 addAttribute()方法向employee元素添加id和name属性

emp2Elem.addAttribute("id", "0002")

emp2Elem.addAttribute("name", "fox")

// 向employee元素中添加sex元素

Element sex2Elem = emp2Elem.addElement("sex")

// 使用setText()方法设置sex元素的文本

sex2Elem.setText("f")

// 在employee元素中增加age元素 并设置该元素的文本。

Element age2Elem = emp2Elem.addElement("age")

age2Elem.setText("24")

// 可以使用 addDocType()方法添加文档类型说明。

// document.addDocType("employees", null, "file://E:/Dtds/dom4j.dtd")

// 这样就向 XML 文档中增加文档类型说明:

// <!DOCTYPE employees SYSTEM "file://E:/Dtds/dom4j.dtd">

// 如果文档要使用文档类型定义(DTD)文档验证则必须有 Doctype。

try {

XMLWriter output = new XMLWriter(new FileWriter(file))

output.write(document)

output.close()

} catch (IOException e) {

System.out.println(e.getMessage())

}

}

这段源码里面包含了各种 *** 作

JAXB中的继承问题

问题

JAXB是我用过的java处理XML的方法中做方便的一个,在jaxb中如何使用类的集成关系有一个小小的需要注意的地方。看下面的两端XML。

XML

示例1:

<a>

<b></b>

<c></c>

<a>

XML示例2:

<a>

<b></b>

<d></d>

<a>

这两段XML的唯一差别就在c元素与d元素。为了生成这两个XML,有几种方案。

方案一

不利用类的继承来重用代码,写两套Java代码, 如:

@XmlRootElement(name = a)

public class A

{

B b

C c:

}

@XmlRootElement(name = a)

public class A2

{

B b

D d:

}

public class B {}

public class D {}

这一方案不是我们想要的,虽然可以解决问题,但是不能重用两个XML中共有的结构。

方案二

利用一个父类表示两个XML之间的共同的结构,用两个子类扩展这个父类,分别添加 C 和 D

元素。

代码如下:

@XmlRootElement(name = "a")

public class A {

B

b

}

public class B {}

public class C {}

public class D

{}

public class E extends A {

C c

}

public class F

extends A {

D d

}

这一方案看似很直观,但是实践中却发现 E 和 F 却都只能生成 父类的

部分,如下的XML:

<a>

<b></b>

<a>

即使把 @XmlRootElement(name = “a”) 移到 E 和 F类上也行不通。

方案三

用一个类代表共同的结构,用一个父类代表C和D元素,在用两个类代表具体化的C和D类,如:

@XmlRootEelemnt(name =

"a")

public class A {

B b

@XmlElements({

@XmlElement(name =

"c", type=C.class),

@XmlElement(name = "d", type=D.class)

})

E

e

}

public class B {}

public class E {}

public class C extends

E {}

public class D extends E {}

这样做才最终达到目的。关键点就是@XmlElements的使用。

这写的有点太乱了吧,js和jQuery结合?!!?

js这样写一句话就可以

document.getElementsByTagName("input")[0].setAttribute("disabled", "disabled")

jQuery这样一句话就可以

$("input").attr("disabled","disabled")

jQuery attr() 方法设置或返回被选元素的属性值。

获取属性值语法

$(selector).attr(attribute)

参数描述

attribute规定要获取其值的属性。

设置属性

设置被选元素的属性和值。

语法

$(selector).attr(attribute,value)

参数 描述

attribute规定属性的名称。

value 规定属性的值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11729979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存