需要解析的xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person><name>jak</name><sex>boy</sex></person>
<person>
<name>jcy</name>
<sex>girl</sex>
</person>
</persons>
解析xml内容的代码如下:
package domparser;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DomXmlReader {
public void parsersXml() {
// 实例化一个文档构建器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
// 通过文档构建器工厂获取一个文档构建器
DocumentBuilder db = dbf.newDocumentBuilder();
// 通过文档通过文档构建器构建一个文档实例
Document doc = db.parse("src/persons.xml");
// 获取所有名字为 “person” 的节点
NodeList noteList1 = doc.getElementsByTagName("person");
int size1 = noteList1.getLength();
System.out.println("size1:"+size1);
for (int i = 0; i < size1; i++) {
Node n = noteList1.item(i);
// 获取 n 节点下所有的子节点。此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。
NodeList noteList2 = n.getChildNodes();
// 因为上面的原因,在此例中第一个 n 节点有 2 个子节点,而第二个 n 节点则有 5 个子节点(因为多了3个回车)。
int size2 = noteList2.getLength();
System.out.println("size2:"+size2);
for (int j = 0; j < size2; j++) {
Node n2 = noteList2.item(j);
// 还是因为上面的原因,故此要处判断当 n2 节点有子节点的时才输出。
if (n2.hasChildNodes()) {
System.out.println(n2.getNodeName() + " = " + n2.getFirstChild().getNodeValue());
}
}
}
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (SAXException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
DomXmlReader domxml = new DomXmlReader();
domxml.parsersXml();
}
}