[英]How do I parse this xml in Java using DOM API?
我正在嘗試解析xml文件,並且只想獲取某些信息。
...
<field name="firstname">
<value>John</value>
</field>
<field name="lastname">
<value>Citizen</value>
</field>
<field name="DoB">
<value>01/01/1980</value>
</field>
<field name="Profession">
<value>"Manager"</value>
</field>
....
並且我有文檔,現在我可以通過循環標簽的NodeList來打印所有值,但是,我不知道如何獲取特定值,例如,我只想從列表中獲取姓氏和職業,所以我我的目標是擁有:“公民”和“經理”
請提供任何線索。
謝謝
使用DOM API進行實驗(稍微使用Document,Element和Node的方法),您將很快就可以輕松地處理XML。
在下面的示例中,我將XML作為字符串加載,提取了節點並將其放置在Map中。 您可以將其用作編寫代碼的起點。 我只是在您的XML中添加了<root>
,所以可以將代碼放在一個有效的示例中。
public class DOMExampleStackOverflow3 {
public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException, TransformerException {
InputSource source = new InputSource(new StringReader("<root>\n" +
"<field name=\"firstname\">\n" +
" <value>John</value>\n" +
"</field>\n" +
"<field name=\"lastname\">\n" +
" <value>Citizen</value>\n" +
"</field>\n" +
"<field name=\"DoB\">\n" +
" <value>01/01/1980</value>\n" +
"</field>\n" +
"<field name=\"Profession\">\n" +
" <value>Manager</value>\n" +
"</field>\n" +
"</root>" ));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(source);
NodeList allFields = (NodeList) document.getElementsByTagName("field");
Map<String, String> data = new HashMap<>();
for(int i = 0; i < allFields.getLength(); i++) {
Element field = (Element)allFields.item(i);
String nameAttribute = field.getAttribute("name");
Element child = (Element)field.getElementsByTagName("value").item(0);
String value = child.getTextContent();
data.put(nameAttribute, value);
}
for(Map.Entry field : data.entrySet()) {
System.out.println(field.getKey() + ": " + field.getValue());
}
}
}
結果是:
firstname: John
Profession: Manager
DoB: 01/01/1980
lastname: Citizen
現在,您可以更改代碼,並在條件塊提取中使用所需的屬性信息。
您可能只使用XPath。 這是使用Xsylum的示例:
XmlDocument doc = Xsylum.documentFor(xml);
String lastName = doc.value("//field[@name='lastname']/value/text()");
String profession = doc.value("//field[@name='Profession']/value/text()");
Try This......
package com.mkyong.seo;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
public class ReadXMLFile {
public static void main(String argv[]) {
try {
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());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
For More Reference: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.