从java中的XML读取

read from XML in java

本文关键字:读取 XML 中的 java      更新时间:2023-11-15

我正试图通过这段代码从xml中读取,但它不起作用。。我需要读取特定标记(getelementbyid)中的id我需要在我的java代码中更改什么

这是我的xml代码

<book>
<person>
<name>
  <first id=1 name="Kiran"/>
  <first id=2 name="Pai"/>
  </name>
    <age>22</age>
</person>
<person>
<name>
  <first id=1 name="Bill"/>
  <first id=2 name="Gates"/>
    </name>
  <age>46</age>
</person>
<person>
<name>
  <first id=1 name="Steve"/>
  <first id=2 name="Jobs"/>
    </name>
  <age>40</age>
</person>
</book>

这是我的java代码

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLReader {
 public static void main(String argv[]) {
  try {
  File file = new File("c:''MyXMLFile.xml");
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(file);
  doc.getDocumentElement().normalize();
  System.out.println("Root element " + doc.getDocumentElement().getNodeName());
  NodeList nodeLst = doc.getElementsByTagName("employee");
  System.out.println("Information of all employees");
  for (int s = 0; s < nodeLst.getLength(); s++) {
    Node fstNode = nodeLst.item(s);
    if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
           Element fstElmnt = (Element) fstNode;
      NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("firstname");
      Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
      NodeList fstNm = fstNmElmnt.getChildNodes();
      System.out.println("First Name : "  + ((Node) fstNm.item(0)).getNodeValue());
      NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("lastname");
      Element lstNmElmnt = (Element) lstNmElmntLst.item(0);
      NodeList lstNm = lstNmElmnt.getChildNodes();
      System.out.println("Last Name : " + ((Node) lstNm.item(0)).getNodeValue());
    }
  }
  } catch (Exception e) {
    e.printStackTrace();
  }
 }
}

您可以了解JAXB。它是JavaSE的一部分。您只需要将XML模式映射到几个POJO类,并用JAXB注释来描述它们。

将XML映射到对象(反之亦然)的可能代码大约需要5行。

你可以在这里阅读:http://docs.oracle.com/javase/tutorial/jaxb/intro/

这应该有效:

public class XMLReader {
public static void main(String argv[]) {
  try {
    File file = new File("c:''MyXMLFile.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(file);
    doc.getDocumentElement().normalize();
    System.out.println("Root element " +  doc.getDocumentElement().getNodeName());
   NodeList nodeLst = doc.getElementsByTagName("name");
   System.out.println("Information of all employees");
   for (int s = 0; s < nodeLst.getLength(); s++) {
   Node fstNode = nodeLst.item(s);
   if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
   Element fstElmnt = (Element) fstNode;
   NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("first");
   Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
   System.out.println("First Name : "  +fstNmElmnt.getAttributeNode("name").getNodeValue());

  Element lstNmElmnt = (Element) fstNmElmntLst.item(1);
  System.out.println("Last Name : "  +lstNmElmnt.getAttributeNode("name").getNodeValue());
}
  }
 } catch (Exception e) {
e.printStackTrace();
}
}
}

并更正xml以引用属性:

<book>
<person>
<name>
  <first id="1" name="Kiran"/>
  <first id="2" name="Pai"/>
  </name>
    <age>22</age>
</person>
<person>
<name>
  <first id="1" name="Bill"/>
  <first id="2" name="Gates"/>
    </name>
  <age>46</age>
</person>
<person>
<name>
  <first id="1" name="Steve"/>
  <first id="2" name="Jobs"/>
    </name>
  <age>40</age>
</person>
</book>

其中一个问题是内置的Java XML库只是一般的。虽然主要用于HTML,但如果您不使用xpath,JSoup会更容易使用。

String yourXml = ...
Document doc = Jsoup.parse(yourXml, "", Parser.xmlParser()); 
    for (Element person : doc.getElementsByTag("person")) {
        String firstName = person.getElementById("1").text();
        String lastName = person.getElementById("2").text();
    }