XML是一种灵活的数据格式结构,可以用来进行转账除其他事项外应用程序的数据。 XML是常用的许多网络技术,例如通信结合RSS是一种XML文档的例子。本教程将介绍如何使用Java建立和编写XML
基本的XML格式
文件开始是一个指定XML文档的版本和文件的编码格式的特殊标签,例如:所有的标签都由一个 <“开始和一个">结束,但只有特殊的XML标记结束需要?。文件是由一个或多个节点或节点嵌套组成。每个节点代表文档中的一个标记,来看个例子:
1. <?xml version="1.0" encoding="UTF-8"?>2. <root>3. <contacts>4. <contact>5. <name>John Doe</name>6. <phone>123-456-7890</phone>7. </contact>8. <contact>9. <name>Bob Smith</name>10. <phone>123-555-1212</phone>11. </contact>12. </contacts>13. </root>下面是使用简单的方法输出XML
1. public class SimpleXMLOut {2. public static void main(String args[]) {3. String[] input = {"John Doe,123-456-7890", "Bob Smith,123-555-1212"};4. String[] line = new String[2];5. System.out.println("<?xml version="1.0" encoding="UTF-8"?>");6. System.out.println("<root>");7. System.out.println("<members>");8. for (int i=0; i < input.length; i++) {9. line = input[i].split(",");10. System.out.println(" <member>");11. System.out.println(" <name>" + line[0] + "</name>");12. System.out.println(" <phone>" + line[1] + "</phone>");13. System.out.println(" </member>");14. }15. System.out.println("</members>");16. System.out.println("</root>");17. }18. }使用DOM创建一个文档,是与DocumentBuilderFactory的完成和DocumentBuilder类。该方法DocumentBuilder.newDocument用于创建文档。文件组成元素是DOM文档的基本对象。使用文档对象的createElement方法,并作为参数传递的元素名称。
一旦元素被创建,必须追加到文件。使用父元素或文件appendChild传递函数对象作为参数子元素。为了简单地使用嵌套元素的元素,您想是该节点的父节点appendChild方法
1. import java.io.StringWriter;2. import javax.xml.parsers.DocumentBuilder;3. import javax.xml.parsers.DocumentBuilderFactory;4. import javax.xml.parsers.ParserConfigurationException;5. import javax.xml.transform.Transformer;6. import javax.xml.transform.TransformerException;7. import javax.xml.transform.TransformerFactory;8. import javax.xml.transform.dom.DOMSource;9. import javax.xml.transform.stream.StreamResult;10. import org.w3c.dom.Document;11. import org.w3c.dom.Element;12.13. public class DOMBasicDoc {14. public static void main(String args[]) {15. try {16. String[] input = {"John Doe,123-456-7890", "Bob Smith,123-555-1212"};17. String[] line = new String[2];18. DocumentBuilderFactory dFact = DocumentBuilderFactory.newInstance();19. DocumentBuilder build = dFact.newDocumentBuilder();20. Document doc = build.newDocument();21. Element root = doc.createElement("root");22. doc.appendChild(root);23. Element memberList = doc.createElement("members");24. root.appendChild(memberList);25. for (int i = 0; i < input.length; i++) {26. line = input[i].split(",");27. Element member = doc.createElement("member");28. memberList.appendChild(member);29. Element name = doc.createElement("name");30. name.appendChild(doc.createTextNode(line[0]));31. member.appendChild(name);32. Element phone = doc.createElement("phone");33. phone.appendChild(doc.createTextNode(line[1]));34. member.appendChild(phone);35. }36. TransformerFactory tFact = TransformerFactory.newInstance();37. Transformer trans = tFact.newTransformer();38.39. StringWriter writer = new StringWriter();40. StreamResult result = new StreamResult(writer);41. DOMSource source = new DOMSource(doc);42. trans.transform(source, result);43. System.out.println(writer.toString());44.45. } catch (TransformerException ex) {46. System.out.println("Error outputting document");47. } catch (ParserConfigurationException ex) {48. System.out.println("Error building document");49. }50. }51. }
首先设定输入的字符串数组包含数据生成XML的结构。该字符串数组线将被用来进行分裂CSV输入数据。下一个初始化的DocumentBuilderFactory对象。使用的DocumentBuilderFactory创建一个与newDocumentBuilder DocumentBuilder实例()方法。最后,创建具有的DocumentBuilder文档对象使用新建文档()方法。这就是为什么小串结构简单更快捷,更方便,可以使用DOM详细。
大楼的文件很简单,创建内容和附加的儿童,他们应该在文档中。第一,并创造一个文档对象的createElement根元素()方法传递作为参数元素的名称。元素在XML文档中的标记。接下来,使用该文件的appendChild方法附加根标记的文件。现在创建一个元素“成员”。成员名单将被追加到这一因素。使用createElement()文档对象的方法创建成员元素。现在使用的根元素对象appendChild()方法追加作为根标记子成员元素。
始终使用appendChild()的父对象的新节点应该嵌套的方法。
通过输入数组循环建立的成员名单。每次循环的时间设置字符串数组输入到数组中的数据输入逗号分割值。创建一个新的元素成员,并追加到的成员节点。下创建子节点举行输入数组的姓名和电话号码的值。使用createElement()创建的姓名和电话的内容。要保存在标签中使用一个文本值一个createTextNode()文档对象的方法。通过文本值作为一个createTextNode参数()方法。追加文本节点的元素将保留的价值。追加的姓名和电话元素成员标签的每个循环迭代创建。
现在,该文件是建立它必须转化为被显示为一个字符串或发送到一个输出流。首先初始化TransformerFactory和使用newTransformer()来创建对象的变压器。变压器的对象将被用于拍摄的DOM并把它传递到输出流。下一步初始化一个StringWriter对象。然后再创建一个StreamResult对象,并将它传递的StringWriter对象。
从文件建立一个新的DOMSource对象。现在使用的变压器对象以转换的DOM到输出流。最后输出的XML使用StringWriters toString()方法获得一个字符串的XML。无论是变压器和DOM的DocumentBuilder抛出异常,TransformerException和ParserConfigurationException分别。为了简单起见本教程只是将它们传递给内置Java记录
属性
属性是核心价值,即可以连接到元素对。它们是存储在文件中的标记,例如:文本节点
1. import java.io.StringWriter;
2. import javax.xml.parsers.DocumentBuilder;
3. import javax.xml.parsers.DocumentBuilderFactory;
4. import javax.xml.parsers.ParserConfigurationException;
5. import javax.xml.transform.OutputKeys;
6. import javax.xml.transform.Transformer;
7. import javax.xml.transform.TransformerException;
8. import javax.xml.transform.TransformerFactory;
9. import javax.xml.transform.dom.DOMSource;
10. import javax.xml.transform.stream.StreamResult;
11. import org.w3c.dom.Document;
12. import org.w3c.dom.Element;
13.
14. public class DOMAttrDoc {
15. public static void main(String args[]) {
16. try {
17. String[] input = {"John Doe,123-456-7890,123 Fake St,Atlanta,GA,30012", "Bob Smith,123-555-1212,456 Fake St,Atlanta,GA,30012"};
18. String[] line = new String[6];
19.
20. DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
21. DocumentBuilder build = fact.newDocumentBuilder();
22. Document doc = build.newDocument();
23. Element root = doc.createElement("root");
24. doc.appendChild(root);
25. Element memberList = doc.createElement("members");
26. root.appendChild(memberList);
27. for (int i = 0; i < input.length; i++) {
28. line = input[i].split(",");
29. Element member = doc.createElement("member");
30. member.setAttribute("name", line[0]);
31. member.setAttribute("phone", line[1]);
32. member.setAttribute("street", line[2]);
33. member.setAttribute("city", line[3]);
34. member.setAttribute("state", line[4]);
35. member.setAttribute("zip", line[5]);
36. memberList.appendChild(member);
37. }
38. TransformerFactory tFact = TransformerFactory.newInstance();
39. Transformer trans = tFact.newTransformer();
40. trans.setOutputProperty(OutputKeys.INDENT, "yes");
41.
42. StringWriter writer = new StringWriter();
43. StreamResult result = new StreamResult(writer);
44. DOMSource source = new DOMSource(doc);
45. trans.transform(source, result);
46. System.out.println(writer.toString());
47.
48. } catch (TransformerException ex) {
49. System.out.println("Error outputting document");
50. } catch (ParserConfigurationException ex) {
51. System.out.println("Error building document");
52. }
53. }
54. }
正如前初始化数据集和数组举行逗号分割值。注意从上例中的数据的额外字段。安装程序的DocumentBuilderFactory
现在创建根元素,并将它附加到文档。一如以往,并创造一个根标签的createElement()方法,并使用appendChild()将其附加到文档。使用createElement()方法来创建标记的成员名单将在成员元素家长和追加到根节点。输入的数组中的值将存储在该成员节点属性的XML文档。
遍历数组中的值。首先分成与分裂逗号分隔值的数组值。下一步创建成员节点。使用的setAttribute()的成员节点对象的方法添加值的节点。在setAttribute()方法预计,属性名和值作为参数传递。一旦所有的属性添加附加作为成员的成员节点的子节点。
当循环完成TransformerFactory用于DOM文档转换为一个字符串。使用TransformerFactory对象创建变压器对象。要构建一个文档,人类更容易阅读使用setOutputProperty()变压器的对象的方法来设置OutputKeys.INDENT值为yes。这将插入制表符和换行符到文档中。
建立一个StringWriter和StreamResult传递到变压器获得的XML作为字符串。初始化一个变压器DOMSource对象用于获取从DOM对象的XML。变压器对象的变换方法用于DOM对象的转换为一个字符串。使用StringWriters toString方法得到的XML文本值。最后要做的是抓住可能抛出可能的例外。该ParserConfigurationException所引发的DocumentBuilder和TransformerException是由变压器对象抛出