[英]How to parse specific information from a XML-file into objects in java?
我對編程很陌生,尤其是 XML 解析的新手,我目前在 Java 中遇到 xml 解析問題。 我嘗試了幾種方法來從 xml 文件中獲取特定信息並將其寫入一個對象,稍后將其放入數組列表並進行排序。 這是我的 XML 文件的捷徑(我更改了名稱和值,因為我不確定是否允許共享它。):
<things>
<code V="123"/>
<region V="38"/>
<hl_list>
<hl>
<stuff_hmv V="XXX" DN="some other stuff"/>
<secondary_code V="Z98"/>
<infotext V="max 12 units"/>
<kl_list>
<kl V="I" DN="some other stuff">
<diag_list>
<diag V="WS1" DN="illness 1"/>
<diag V="WS2" DN="illness 2"/>
<diag V="EX1" DN="illness 3"/>
</diag_list>
</kl>
</kl_list>
</hl>
</hl_list>
</things>
<things>
<code V="456"/>
<region V="45"/>
<hl_list>
<hl>
<stuff_hmv V="X1X" DN="some other stuff"/>
<infotext V="max 13 units"/>
<kl_list>
<kl V="II" DN="some other stuff">
<diag_list>
<diag V="WS1" DN="illness 3"/>
<diag V="WS2" DN="illness 2"/>
<diag V="EX1" DN="illness 4"/>
</diag_list>
</kl>
</kl_list>
</hl>
</hl_list>
</things>
這基本上就是我正在使用的。 我有幾個“事物塊”,我的對象中需要以下信息(如果存在)。 如果對象已填充,則應將其放入數組列表中,然后下一個塊繼續。 來自xml的信息:
到目前為止,我已經嘗試使用 getElementsByTagName 和 getter/setter 來獲取我的對象的信息。
JAXB 可能是您的解決方案
@XmlRootElement
public class Things {
private String code;
private String region;
@XmlElement
public void setCode(String code) {
this.code = code;
}
@XmlElement
public void setCode(String region) {
this.region = region;
}
}
JAXBContext jaxbContext = JAXBContext.newInstance(Things.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new File("C:\\file.xml"));
有關更多信息,請檢查 jaxb以及如何將 xml 解析為 java 對象?
File fXmlFile = new File("/Users/mkyong/staff.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
//optional, but recommended
//read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("staff");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Staff id : " + eElement.getAttribute("id"));
System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
}
}
簡單地用代碼或你想在ONENODE上取的東西替換員工標記標簽
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.