Jdom 操作XML

可扩展标记语言——eXtensible MarkupLanguage

用户可以自己定义语言标记,只要有开始和闭合标签即可。

xsl装饰、修饰xml的显示结果。

dtd约束xml文件中的标记。

Ø XML的优点:

    1、xml可以让数据和标记分离。

    2、异质信息互通

    3、机器语言

    4、用交流语言替代html装饰语言

    5、简单易用

    6、可以自定义、可扩展  

Ø XML和HTML比较

比较内容

HTML

XML

可扩展性

不具有扩展性、标记固定

是元标记语言,可以定义新标记,用户可以自定义标记

侧重点

侧重于信息的表现形式为什么格式被关注

侧重于结构化的描述信息,数据是什么为XML所关注

语法

不严格(嵌套、配对)

严格嵌套、配对,并按照DTD要求输出

可读性、可维护性

难于阅读和维护

结构清晰,便于阅读维护

数据本身、显示

数据和显示合为一处

数据与显示分离

重用性

可重用性高

 
Ø JDOM操作XML

JDOM可以很方便的操作XML文档,完成XML内容的创建、修改,已经遍历Document文档中的XML元素,完成查询等。下面我们就用JDOM完成这些功能。

/**
 * <b>function:</b>打印doc相关信息
 * @author hoojo
 * @createDate 2011-8-10 下午06:29:01
 */
@SuppressWarnings("unchecked")
@Test
public void printInfo() {
	SAXBuilder builder = new SAXBuilder();
	try {
		//builder.setFeature("user", true);
		//builder.setIgnoringBoundaryWhitespace(true);
		//忽略元素内容的空格
		//builder.setIgnoringElementContentWhitespace(true);
		
		Document doc = builder.build(new File("file/web.xml"));
		fail("baseURI: " + doc.getBaseURI());
		fail("ContentSize: " + doc.getContentSize());
		//System.out.println("getContent: ");
		//print(0, doc.getContent());
		
		fail("getContent index: " + doc.getRootElement().getContent(1));
		fail("getDocType: " + doc.getDocType());
		fail("getParent: " + doc.getRootElement().getContent(1).getParent());
		fail("getProperty: " + doc.getProperty("filter"));
		print(0, XPath.selectNodes(doc, "//*[contains(text(), "#")]"));
		fail("getText: " + ((Element)XPath.selectNodes(doc, "//*[contains(text(), "#")]").get(0)).getText());
		fail("getTextTrim: " + ((Element)XPath.selectNodes(doc, "//*[contains(text(), "#")]").get(0)).getTextTrim());
		fail("getTextNormalize: " + ((Element)XPath.selectNodes(doc, "//*[contains(text(), "#")]").get(0)).getTextNormalize());
		fail("hasRootElement: " + doc.hasRootElement());
		
		//如果文档带有Namespace一定要设置Namespace,不然无法读取内容
		Namespace ns = Namespace.getNamespace("http://java.sun.com/xml/ns/javaee");
		Element servletEl = doc.getRootElement().getChild("servlet", ns);
		fail("servletEl: " + servletEl);
		print(0, servletEl.getChildren());
		
		fail("getChildText: " + servletEl.getChildText("servlet-class", ns));
		fail("getChildTextNormalize: " + servletEl.getChildTextNormalize("servlet-name", ns));
		fail("getChildTextTrim: " + servletEl.getChildTextTrim("servlet-class", ns));
		fail("getName: " + servletEl.getName());
		fail("getNamespacePrefix: " + servletEl.getNamespacePrefix());
		fail("getNamespace: " + servletEl.getNamespace());
		fail("getQualifiedName: " + servletEl.getQualifiedName());
		Element classEl = servletEl.getChild("servlet-class", ns);
		fail("getText: " + classEl.getText());
		fail("getTextNormalize: " + classEl.getTextNormalize());
		fail("getTextTrim: " + classEl.getTextTrim());
		fail("getValue: " + classEl.getValue());
		
		//删除节点
		fail(doc.getRootElement().removeContent(3));
		//print(0, doc.removeContent());
		//print(0, doc.getRootElement().getChildren());
		fail(servletEl.removeChild("servlet-class", ns));
		fail(servletEl.removeChildren("init-param", ns));
		
		print(0, servletEl.getChildren());
	} catch (JDOMException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
文章导航