1.XML文件的内容不像HTML那样,他是一套标准,主要由以下部分组成:
<?xml version="1.0" encoding="UTF-8"?>
<MyRoot title="usermessage">------根元素(一个xml文档只有一个根元素)
<name>henrylin</name> ------name子元素 包含内容henrylin
<age value="23"/> ------带属性value值为23的age子元素
<contact> ------子元素contact含有子元素telephone
<telephone>13459204193</telephone>
</contact>
</MyRoot>
2.以上xml文件的生成过程的对象关系:
XML 元素==Element 的实例
XML 属性== Attribute 的实例
XML 文档== Document 的实例
3.代码:
Element root=new Element("MyRoot");
Domcument myDocument=new Document(root);//根元素作为参数创建对象
Attribute att=new Attribute("title","usermessage");
root.setAttribute(att);//给根元素对象添加属性,名为title,值为usermessage
Element name=new Element("name");
name.addContent("henrylin");// 初始化一个含有henrylin的内容的element
root.addContent(name);//将该节点添加到element的content内容中
root.addContent(new Element("age").setAttribute(new Attribute("age","23")));添加带属性的节点
root.removeChild("age");//删除root元素下面的age子元素
注:以上代码可看出Element类有一个两个同名方法addContent,参数分别为String和Element。
一般在叶子节点上面直接使用String参数,其他时候通常使用Element参数。
理解以上代码以后,几乎可以生成任何你想要生成的XML内容了。
4. 使用XMLOutputter类将JDOM文档对象转化为其他输出对象
4.1 输出到控制台
XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());//指定格式
try {
xmlOut.output(myDocument,System.out);//指定输出对象为System.out
} catch (IOException e)
{
e.printStackTrace();
}
4.2 转化给Writer 或 OutputStream对象:
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();
4.3 转化给String变量:
Strng outString = xmlOut.outputString(myDocument);
4.4 选择元素进行输出:
xmlOut.output(rootElement.getChild("name"),System.out);
5.JDOM读取并操作现有的 XML 数据。
包:org.jdom.input.*这个包里。
类:
DOMBuilder功能是将DOM模型的Document解析成JDOM模型的Document
SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。
解析一个xml文档,基本可以看成以下几个步骤:
5.1.实例化一个合适的解析器对象
本例中我们使用SAXBuilder:
SAXBuilder sb = new SAXBuilder();
5.2.以包含XML数据的文件为参数,构建一个文档对象myDocument
Document myDocument = sb.build(/some/directory/myFile.xml);
5.3.获到根元素
Element rootElement = myDocument.getRootElement();
Element对象的常用方法作简单说明:
getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;
如果没有返回null值。
getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,
则返回空字符串。
getChildText("childname") 返回指定子节点的内容文本值。
getText() 返回该元素的内容文本值。