如何在java中读取xml文件

zpf6vheq  于 2023-11-15  发布在  Java
关注(0)|答案(4)|浏览(132)

如何在Java中读取XML文件
下面是我的XML文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LivescoreData>
  3. <Sport SportId="1">
  4. <Name language="en">Soccer</Name>
  5. <Name language="se">Fotboll</Name>
  6. <Category CategoryId="34">
  7. <Name language="en">Australia</Name>
  8. <Name language="se">Australien</Name>
  9. <Tournament TournamentId="144">
  10. <Name language="en">Hyundai A-League</Name>
  11. <Name language="se">Hyundai A-League</Name>
  12. <Match MatchId="4616735">
  13. <MatchDate>2011-01-05T07:30:00</MatchDate>
  14. <Team1 TeamId="1029369">
  15. <Name language="en">Wellington Phoenix FC</Name>
  16. <Name language="se">Wellington</Name>
  17. </Team1>
  18. <Team2 TeamId="529088">
  19. <Name language="en">Melbourne Victory</Name>
  20. <Name language="se">Melbourne Victory</Name>
  21. </Team2>
  22. <Status Code="100">
  23. <Name language="en">Ended</Name>
  24. <Name language="se">Avslutad</Name>
  25. </Status>
  26. <Winner>1</Winner>
  27. <Scores>
  28. <Score type="Current">
  29. <Team1>2</Team1>
  30. <Team2>0</Team2>
  31. </Score>
  32. </Scores>
  33. <Goals></Goals>
  34. <Cards></Cards>
  35. <Substitutions></Substitutions>
  36. <Lineups></Lineups>
  37. </Match>
  38. </Tournament>
  39. </Category>
  40. <Category CategoryId="1">
  41. <Name language="en">England</Name>
  42. <Name language="se">England</Name>
  43. <Tournament TournamentId="1">
  44. <Name language="en">Premier League</Name>
  45. <Name language="se">Premier League</Name>
  46. <Match MatchId="4601857">
  47. <MatchDate>2011-01-04T21:00:00</MatchDate>
  48. <Team1 TeamId="5431228">
  49. <Name language="en">Blackpool FC</Name>
  50. <Name language="se">Blackpool FC</Name>
  51. </Team1>
  52. <Team2 TeamId="23960">
  53. <Name language="en">Birmingham City</Name>
  54. <Name language="se">Birmingham City</Name>
  55. </Team2>
  56. <Status Code="100">
  57. <Name language="en">Ended</Name>
  58. <Name language="se">Avslutad</Name>
  59. </Status>
  60. <Winner>1</Winner>
  61. <Scores>
  62. <Score type="Current">
  63. <Team1>5</Team1>
  64. <Team2>1</Team2>
  65. </Score>
  66. </Scores>
  67. <Goals></Goals>
  68. <Cards></Cards>
  69. <Substitutions></Substitutions>
  70. <Lineups></Lineups>
  71. </Match>
  72. <Match MatchId="4601859">
  73. <MatchDate>2011-01-04T21:00:00</MatchDate>
  74. <Team1 TeamId="26511">
  75. <Name language="en">Fulham FC</Name>
  76. <Name language="se">Fulham FC</Name>
  77. </Team1>
  78. <Team2 TeamId="94356">
  79. <Name language="en">West Bromwich Albion</Name>
  80. <Name language="se">West Bromwich Albion</Name>
  81. </Team2>
  82. <Status Code="100">
  83. <Name language="en">Ended</Name>
  84. <Name language="se">Avslutad</Name>
  85. </Status>
  86. <Winner>1</Winner>
  87. <Scores>
  88. <Score type="Current">
  89. <Team1>4</Team1>
  90. <Team2>1</Team2>
  91. </Score>
  92. </Scores>
  93. <Goals></Goals>
  94. <Cards></Cards>
  95. <Substitutions></Substitutions>
  96. <Lineups></Lineups>
  97. </Match>
  98. </Tournament>
  99. </Category>
  100. </Sport>
  101. </LivescoreData>

字符串
下面是代码:它打印XML足球的第一个值,但无法打印下一个值。

  1. nodeLst = doc.getElementsByTagName("Sport");
  2. for (int i = 0; i < nodeLst.getLength(); i++) {
  3. Node myNode = nodeLst.item(i);
  4. if (myNode.getNodeType() == Node.ELEMENT_NODE) {
  5. Element Sport = (Element) myNode;
  6. NodeList Name= Sport
  7. .getElementsByTagName("Name");
  8. Element NameElement = (Element) Name.item(0);
  9. NodeList Namevalue = NameElement.getChildNodes();
  10. System.out.println("Name : "
  11. + ((Node) Namevalue.item(0)).getNodeValue()+"|");
  12. //This gives me null value
  13. NodeList Category = Sport
  14. .getElementsByTagName("Category");
  15. Element CategoryName= (Element) Category
  16. .item(0);
  17. NodeList Categoryvalue = CategoryName
  18. .getChildNodes();
  19. System.out.println("Category: "
  20. + ((Node) Categoryvalue.item(0))
  21. .getNodeValue());
  22. }
  23. }


我只能读取第一个数据足球。第二个只是给予空值。
我需要的结果是:

  1. Soccer | Australia | Hyundai A-League | Wellington Phoenix FC - Melbourne Victory : 2 - 0
  2. Soccer | England | Premier League | Blackpool FC - Birmingham City : 5 - 1
  3. Soccer | England | Premier League | Fulham FC - West Bromwich Albion : 4 - 1

gcxthw6b

gcxthw6b1#

可以使用JAXP解析XML

nkcskrwz

nkcskrwz2#

由于您还没有真正说出您想对所述XML文件做什么,因此我所能做的就是将您引导到本指南:
http://tutorials.jenkov.com/java-xml/dom.html

cuxqih21

cuxqih213#

最好/最好不要在Java中这样做,而是在可从Java应用程序调用的XML或XQuery代码中这样做。

iyfjxgzm

iyfjxgzm4#

搜索关键字:644264426442代码包括如何在java中写入和读取.xml
保存:

  1. List<Node> list = tree.levelTraversal();
  2. File file = new File("people.xml");
  3. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  4. try {
  5. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  6. Document document = documentBuilder.newDocument();
  7. Element root= document.createElement("people");
  8. document.appendChild(root);
  9. for(Node n:list){
  10. Person p = (Person) n.getData();
  11. Element person = document.createElement("person");
  12. root.appendChild(person);
  13. Element id = document.createElement("id");
  14. id.appendChild(document.createTextNode(p.getId().toString()));
  15. person.appendChild(id);
  16. Element name = document.createElement("name");
  17. name.appendChild(document.createTextNode(p.getName()));
  18. person.appendChild(name);
  19. Element age = document.createElement("age");
  20. age.appendChild(document.createTextNode(p.getAge().toString()));
  21. person.appendChild(age);
  22. Element occupation = document.createElement("occupation");
  23. occupation.appendChild(document.createTextNode(p.getOccupation()));
  24. person.appendChild(occupation);
  25. }
  26. Transformer transformer = TransformerFactory.newDefaultInstance().newTransformer();
  27. transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
  28. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  29. DOMSource domSource=new DOMSource(document);
  30. StreamResult result = new StreamResult(file);
  31. transformer.transform(domSource,result);
  32. }
  33. //==========================================
  34. Element root = doc.createElement(STATE_ROOT_ELEMENT);
  35. doc.appendChild(root);
  36. for(int i=0;i< keys.size();i++){
  37. Element key = doc.createElement(keys.get(i));
  38. key.setTextContent(states.get(i));
  39. root.appendChild(key);
  40. }

字符串
负载:

  1. File f = new File(FileUtil.getTableFileName(tableName));
  2. DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  3. Document document = db.parse(f);
  4. NodeList customersList = document.getElementsByTagName(Customer.KEY_ELEMENT);
  5. for(int i =0; i<customersList.getLength();i++){
  6. Customer customer = new Customer();
  7. Element element = (Element) customersList.item(i);
  8. Integer id = null;
  9. if(element.getElementsByTagName(Customer.KEY_ID).getLength()!=0)
  10. id = Integer.valueOf(element.getElementsByTagName(Customer.KEY_ID).item(0).getFirstChild().getNodeValue());
  11. if(element.getElementsByTagName(Customer.KEY_NAME).getLength()!=0)
  12. name = element.getElementsByTagName(Customer.KEY_NAME).item(0).getFirstChild().getNodeValue();
  13. }
  14. //=====================
  15. NodeList list = doc.getFirstChild().getChildNodes();
  16. for(int i =0;i<list.getLength();i++){
  17. if(list.item(i).getNodeType()==1) {
  18. String s1 = list.item(i).getNodeName();
  19. key.add(s1);
  20. String s2 = list.item(i).getTextContent();
  21. states.add(s2);
  22. }
  23. }
  24. returnList.add(key);
  25. returnList.add(states);
  26. return returnList;


测试

  1. @Test(expected = NullCharacterException.class, timeout = 1000)
  2. public void testNullCharacterException() {
  3. State state = StandState.getInstance();
  4. state.check(null,Key.RESET);
  5. }
  6. //=========================================================
  7. @Test
  8. public void test2(){
  9. Person person = new Person("jake",30,"1",false,false);
  10. person.setId(1);
  11. Exception exception = assertThrows(RuntimeException.class, ()->{
  12. personRepository.save(person);
  13. });;
  14. assertEquals("Person instance must have null id",exception.getMessage());
  15. }

展开查看全部

相关问题