Dom(文档对象模型)文档对象模型(Document Object Model,DOM)是公认的 W3C 标准,它被用于与平台及语言无关的 XML 文档内容、结构和样式的
动态访问和更新DOM 规范被设计成可与任何编程语言一起使用
DOM 的有效使用:
如果您遵循几条基本原则,您使用 DOM 的经验将会显著提高:
l 不要使用 DOM 遍历文档。
l 尽可能使用 XPath 来查找节点或遍历文档。
l 使用较高级的函数库来更方便地使用 DOM。
第一:解析.xml文件
现有user.xml
<?xml version="1.0" encoding="GB2312" ?>
<result>
<user>
<name>龙准</name>
<age>25</age>
</user>
<user>
<name>廖丽</name>
<age>22</age>
</user>
</result>
解析代码如下:
File file=new File("D://user.xml");
//得到DOM解析器的工厂实例
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//解析XML文档,得到一个Document
Document docment=builder.parse(file);
//得到XML文档的根节点
//在DOM中只有根节点是一个org.w3c.dom.Element对象。
Element root=docment.getDocumentElement();
NodeList user=root.getElementsByTagName("user");
System.out.println("共有"+user.getLength()+"个用户,分别是:");
for(int v=0;v<user.getLength();v++){
String name=root.getElementsByTagName("name").item(v).
getFirstChild().getNodeValue();
String age=root.getElementsByTagName("age").item(v).
getFirstChild().getNodeValue();
System.out.println(name+" "+age);
}
打印结果:
共有2个用户,分别是:
龙准 25
廖丽 21
第二:直接解析xml字符串
StringBuffer xml=new StringBuffer("<?xml version=\"1.0\" encoding=\"GB2312\" ?> ");
xml.append("<result>");
xml.append("<user>");
xml.append("<name>龙准</name>");
xml.append("<age>25</age>");
xml.append("</user>");
xml.append("<user>");
xml.append("<name>廖丽</name>");
xml.append("<age>21</age>");
xml.append("</user>");
xml.append("</result>");
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
ByteArrayInputStream bais=null;
Document doc=null;
bais=new ByteArrayInputStream(xml.toString().getBytes());
if(bais!=null){
doc=builder.parse(bais);
}
Element root=doc.getDocumentElement();
NodeList user=root.getElementsByTagName("user");
System.out.println("共有"+user.getLength()+"个用户,分别是:");
for(int v=0;v<user.getLength();v++){
String name=root.getElementsByTagName("name").item(v).
getFirstChild().getNodeValue();
String age=root.getElementsByTagName("age").item(v).
getFirstChild().getNodeValue();
System.out.println(name+" "+age);
}
打印结果:
共有2个用户,分别是:
龙准 25
廖丽 21
解析.xml文件与直接解析xml字符串的区别:
解析.xml是:Document docment=builder.parse(file);
解析xml字符串:ByteArrayInputStream bais=null;
Document doc=null;
//把字符串转化成流
bais=new ByteArrayInputStream(xml.toString().getBytes());
if(bais!=null){
doc=builder.parse(bais);
}