歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> JAVA語言利用DOM解析XML文件

JAVA語言利用DOM解析XML文件

日期:2017/3/1 11:17:12   编辑:Linux編程

利用DOM解析XML文件的時候,會把XML文件預讀的內存中,如果是比較大的XML文件或者是移動設備的話,不建議使用此方法

下面是我解析一個XML文件的詳細代碼

  1. import java.io.InputStream;
  2. import javax.xml.parsers.DocumentBuilder;
  3. import javax.xml.parsers.DocumentBuilderFactory;
  4. import org.w3c.dom.Document;
  5. import org.w3c.dom.Element;
  6. import org.w3c.dom.Node;
  7. import org.w3c.dom.NodeList;
  8. import com.fujitsu.cn.model.Patent;
  9. import com.fujitsu.cn.util.LogHelper;
  10. /**
  11. * 采用DOM解析xml文件
  12. */
  13. public class DOMDetailService {
  14. public static Patent getPatent(InputStream inStream) throws Exception {
  15. Patent patent = new Patent();
  16. LogHelper.v("domservice");
  17. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  18. DocumentBuilder db = dbf.newDocumentBuilder();
  19. Document document = db.parse(inStream);
  20. //通過getDocumentElement()方法獲得該xml文件的根節點
  21. Element root = document.getDocumentElement();
  22. //獲得以 details為標簽對的所有節點對的列表<details></details>
  23. NodeList detailNodes = root.getElementsByTagName("details");
  24. //由於本xml文件中只有一個這樣的標簽對,通過item(i)得到該元素,並且進行強制轉化
  25. Element patentElement = (Element) detailNodes.item(0);
  26. //獲得該標簽下面的所有標簽的節點列表
  27. NodeList childList = patentElement.getChildNodes();
  28. //對獲得到的節點列表進行遍歷 getLength()可以得到NodeList列表的長度
  29. for(int i=0; i<childList.getLength();i++){
  30. //遍歷所有的屬性節點 nodelist.item(i)返回一個Node節點
  31. Node patentAttribut = (Node)childList.item(i);
  32. //由於可能會出現空的節點,對該節點進行判斷,判斷該節點是不是該xml中的元素
  33. //Node.ELEMENT_NODE的值為1,表示該節點是一個Element
  34. if(patentAttribut.getNodeType() == Node.ELEMENT_NODE){
  35. //通過getNodeName()得到該Node的名字
  36. //例如遍歷到<type>3</type>,取值以後就是 type
  37. String tag = patentAttribut.getNodeName();
  38. //getFirstChild()表示獲得該節點下面的第一個孩子,getNodeValue()表示得到該孩子的值
  39. //例如遍歷到<type>3</type>通過該函數得到的值為3
  40. String val = patentAttribut.getFirstChild().getNodeValue();
  41. if("othercontents".equals(tag)){
  42. patent.setOthercontents(val);
  43. }else
  44. if("publiccountry".equals(tag)){
  45. patent.setCountry(val);
  46. }else
  47. if("type".equals(tag)){
  48. patent.setType(val);
  49. }
  50. else
  51. if("title".equals(tag)){
  52. patent.setTitle(val);
  53. }
  54. else
  55. if("IPC".equals(tag)){
  56. patent.setIpc_number(val);
  57. }
  58. else
  59. if("status".equals(tag)){
  60. patent.setStatus(val);
  61. }
  62. else
  63. if("pagenum".equals(tag)){
  64. patent.setPagenum(val);
  65. }
  66. else
  67. if("submitid".equals(tag)){
  68. patent.setSubmit_number(val);
  69. }
  70. else
  71. if("inventors".equals(tag)){
  72. patent.setInventor(val);
  73. }
  74. else
  75. if("agent".equals(tag)){
  76. patent.setAgent(val);
  77. }
  78. else
  79. if("claims".equals(tag)){
  80. patent.setClaims(val);
  81. }
  82. else
  83. if("applicant".equals(tag)){
  84. patent.setProposer(val);
  85. }
  86. }
  87. }
  88. inStream.close();
  89. return patent;
  90. }
  91. }

對該單元進行測試的測試類如下所示:

  1. import java.io.InputStream;
  2. import java.util.List;
  3. public class Test {
  4. public static void main(String[] args) throws Exception {
  5. InputStream inStream = new MainTest().getClass().getClassLoader()
  6. .getResourceAsStream("detail.xml");
  7. Patent p = DOMDetailService.getPatent(inStream);
  8. System.out.println(p.getOthercontents());
  9. }
  10. }

解析的XML文件由於內容太多,已經將其中的內容精簡

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <response>
  3. <details>
  4. <othercontents>1</othercontents>
  5. <publiccountry>2</publiccountry>
  6. <type>3</type>
  7. <title>4</title>
  8. <IPC>5</IPC>
  9. <status>6</status>
  10. <pagenum>7</pagenum>
  11. <submitid>8</submitid>
  12. <submitdate>9</submitdate>
  13. <inventors>10</inventors>
  14. <agent>11</agent>
  15. <claims>12</claims>
  16. <applicant>13</applicant>
  17. </details>
  18. </response>

用到的Model如下所示

  1. public class Patent {
  2. private String title;
  3. private String country;
  4. private String type;
  5. private String status;
  6. private String ipc_number;
  7. private String patent_pages;
  8. private String submit_number;
  9. private String submit_data;
  10. private String proposer;
  11. private String inventor;
  12. private String agent;
  13. private String othercontents;
  14. private String pagenum;
  15. private String articleid;
  16. private String claims;
  17. public String getTitle() {
  18. return title;
  19. }
  20. public void setTitle(String title) {
  21. this.title = title;
  22. }
  23. public String getCountry() {
  24. return country;
  25. }
  26. public void setCountry(String country) {
  27. this.country = country;
  28. }
  29. public String getType() {
  30. return type;
  31. }
  32. public void setType(String type) {
  33. this.type = type;
  34. }
  35. public String getStatus() {
  36. return status;
  37. }
  38. public void setStatus(String status) {
  39. this.status = status;
  40. }
  41. public String getPatent_pages() {
  42. return patent_pages;
  43. }
  44. public void setPatent_pages(String patentPages) {
  45. patent_pages = patentPages;
  46. }
  47. public String getSubmit_number() {
  48. return submit_number;
  49. }
  50. public void setSubmit_number(String submitNumber) {
  51. submit_number = submitNumber;
  52. }
  53. public String getSubmit_data() {
  54. return submit_data;
  55. }
  56. public void setSubmit_data(String submitData) {
  57. submit_data = submitData;
  58. }
  59. public String getProposer() {
  60. return proposer;
  61. }
  62. public void setProposer(String proposer) {
  63. this.proposer = proposer;
  64. }
  65. public String getInventor() {
  66. return inventor;
  67. }
  68. public void setInventor(String inventor) {
  69. this.inventor = inventor;
  70. }
  71. public String getAgent() {
  72. return agent;
  73. }
  74. public void setAgent(String agent) {
  75. this.agent = agent;
  76. }
  77. public String getIpc_number() {
  78. return ipc_number;
  79. }
  80. public void setIpc_number(String ipcNumber) {
  81. ipc_number = ipcNumber;
  82. }
  83. public String getOthercontents() {
  84. return othercontents;
  85. }
  86. public void setOthercontents(String othercontents) {
  87. this.othercontents = othercontents;
  88. }
  89. public String getPagenum() {
  90. return pagenum;
  91. }
  92. public void setPagenum(String pagenum) {
  93. this.pagenum = pagenum;
  94. }
  95. public String getArticleid() {
  96. return articleid;
  97. }
  98. public void setArticleid(String articleid) {
  99. this.articleid = articleid;
  100. }
  101. public String getClaims() {
  102. return claims;
  103. }
  104. public void setClaims(String claims) {
  105. this.claims = claims;
  106. }
  107. }
Copyright © Linux教程網 All Rights Reserved