import javax.xml.parsers.*;
import org.xml.sax.*;
import java.io.*;
import org.w3c.dom.*;
public class code10_3{
static Document document;
public static void main(String[] args){
if(args.length!=1){
System.out.println("加载xml file");
return;
}
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try{
DocumentBuilder db=dbf.newDocumentBuilder();
//读入XML文档//saxParser.parse(new InputSource("D.xml"),myHandler);
document=db.parse(new File(args[0]));
//获得根元素
Node root=document.getDocumentElement();
//获得根元素的子节点列表
NodeList childs=root.getChildNodes();
GetElement(childs);
}catch(SAXException se){
//解析过程错误
Exception e=se;
if(se.getException()!=null)
e=se.getException();
e.printStackTrace();
}catch(ParserConfigurationException pe){
//解析器设定错误
pe.printStackTrace();
}catch(IOException ie){
//文件处理错误
ie.printStackTrace();
}
}
public static void GetElement(NodeList childs){
int i=0;
if(childs.getLength()==0)
{//该节点没有子节点
System.out.println("该节点没有子节点!");
}
for(i=0;i<childs.getLength();i++){
//获取第i个子节点
Node node=childs.item(i);
//获取节点的类型,可以是ElementNode,TextNode,DocumentNode等
short nodetype=node.getNodeType();
/*ElementNode类型的节点可包含子节点和属性等*/
if(nodetype==Node.ELEMENT_NODE)
{
//得到节点名称
String name=node.getNodeName();
String attrValue="",attrName="";
System.out.println("this is element! name is:"+name);
if(node.hasAttributes())
{
/*取出一个元素的属性,得到的是一个属性对象列表(NameNodeMap),
*在此因为xml文档中元素只有一个属性,所以只取NameNodeMap中的第“0”个值。*/
Node attrNode=node.getAttributes().item(0);
/*取出该属性节点的Name和Value,即是一个ElementNode的属性名称和属性值*/
attrName=attrNode.getNodeName();
attrValue=attrNode.getNodeValue();
System.out.println("this element attr is:"+attrValue+";attrnameis:"+attrName);
}
//如有子节点,递归调用GetElement()
if(node.hasChildNodes())
{GetElement(node.getChildNodes());}
}
/*Text类型节点没有子节点,节点名为#text,节点的值为xml文档中元素的值*/
if(nodetype==Node.TEXT_NODE)
{
//该节点的name是"#text"
String txtName=node.getNodeName();
//取出Text类型节点的值
Node thisparent=node.getParentNode();
Node txtNode=thisparent.getChildNodes().item(0);
String txtValue=txtNode.getNodeValue();
if(txtValue.trim().length()>0)
{
System.out.println("txtName="+txtName+"; txtValue="+txtValue.trim());
}
}
}
}
}
import org.xml.sax.*;
import java.io.*;
import org.w3c.dom.*;
public class code10_3{
static Document document;
public static void main(String[] args){
if(args.length!=1){
System.out.println("加载xml file");
return;
}
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try{
DocumentBuilder db=dbf.newDocumentBuilder();
//读入XML文档//saxParser.parse(new InputSource("D.xml"),myHandler);
document=db.parse(new File(args[0]));
//获得根元素
Node root=document.getDocumentElement();
//获得根元素的子节点列表
NodeList childs=root.getChildNodes();
GetElement(childs);
}catch(SAXException se){
//解析过程错误
Exception e=se;
if(se.getException()!=null)
e=se.getException();
e.printStackTrace();
}catch(ParserConfigurationException pe){
//解析器设定错误
pe.printStackTrace();
}catch(IOException ie){
//文件处理错误
ie.printStackTrace();
}
}
public static void GetElement(NodeList childs){
int i=0;
if(childs.getLength()==0)
{//该节点没有子节点
System.out.println("该节点没有子节点!");
}
for(i=0;i<childs.getLength();i++){
//获取第i个子节点
Node node=childs.item(i);
//获取节点的类型,可以是ElementNode,TextNode,DocumentNode等
short nodetype=node.getNodeType();
/*ElementNode类型的节点可包含子节点和属性等*/
if(nodetype==Node.ELEMENT_NODE)
{
//得到节点名称
String name=node.getNodeName();
String attrValue="",attrName="";
System.out.println("this is element! name is:"+name);
if(node.hasAttributes())
{
/*取出一个元素的属性,得到的是一个属性对象列表(NameNodeMap),
*在此因为xml文档中元素只有一个属性,所以只取NameNodeMap中的第“0”个值。*/
Node attrNode=node.getAttributes().item(0);
/*取出该属性节点的Name和Value,即是一个ElementNode的属性名称和属性值*/
attrName=attrNode.getNodeName();
attrValue=attrNode.getNodeValue();
System.out.println("this element attr is:"+attrValue+";attrnameis:"+attrName);
}
//如有子节点,递归调用GetElement()
if(node.hasChildNodes())
{GetElement(node.getChildNodes());}
}
/*Text类型节点没有子节点,节点名为#text,节点的值为xml文档中元素的值*/
if(nodetype==Node.TEXT_NODE)
{
//该节点的name是"#text"
String txtName=node.getNodeName();
//取出Text类型节点的值
Node thisparent=node.getParentNode();
Node txtNode=thisparent.getChildNodes().item(0);
String txtValue=txtNode.getNodeValue();
if(txtValue.trim().length()>0)
{
System.out.println("txtName="+txtName+"; txtValue="+txtValue.trim());
}
}
}
}
}