package hoperun.pagoda.xmltocsv;
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.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XmlToCsv {
/**
* 数据源文件路径.
*/
private static final String XML_FILE_PATH = "D:/file/frmCategoryMaster/formDxl1.xml";
public static void main(String[] agrs) {
// 1、创建解析器工厂对象 DocumentBuildFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
Document dom = null;
try {
// 2、由解析器工厂对象创建解析器对象,即DocumentBuilder对象
db = dbf.newDocumentBuilder();
// 3、由解析器对象对指定XML文件进行解析,构建相应的DOM树,创建Document对象,生成一个Document对象
dom = db.parse(XML_FILE_PATH);
// 4、以Document对象为起点对DOM树的节点进行查询
// 得到所有brand节点信息,是个集合 按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
NodeList brandlist = dom.getElementsByTagName("records");
// 遍历所有brand
for (int i = 0; i < brandlist.getLength(); i++) {
Node brand = brandlist.item(i);
// 转成元素,获取brand的元素值
Element brandelement = (Element) brand;
String brandname = brandelement.getAttribute("name");
String str = brandelement.getTextContent();
System.out.println("属性名"+brandname);
System.out.println("值"+str);
// 查找Type
NodeList typelist = brandelement.getChildNodes();
for (int j = 0; j < typelist.getLength(); j++) {
Node typenode = typelist.item(j);
if (typelist.item(j) instanceof Element) {
Element typename = (Element) typenode;
String typen = typename.getAttribute("name");
String str1 = typename.getTextContent();
System.out.println(brandname+" 子节点属性名" + typen);
System.out.println("子节点值"+str1);
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("解析结束");
}
}
}