收藏信息.xml

  1. <?xml version="1.0" encoding="GB2312" standalone="no"?><PhoneInfo>
  2. <Brand id="0" name="华为">
  3. <Type name="U8650"/>
  4. <Type name="HW123"/>
  5. <Type name="HW321"/>
  6. </Brand>
  7. <Brand id="1" name="苹果">
  8. <Type name="iPhone4"/>
  9. </Brand>
  10. <Brand id="2" name="三星"><type name="s120"/></Brand></PhoneInfo>

解析示例:

  1. import java.io.FileNotFoundException;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4.  
  5. import javax.xml.parsers.DocumentBuilder;
  6. import javax.xml.parsers.DocumentBuilderFactory;
  7. import javax.xml.parsers.ParserConfigurationException;
  8. import javax.xml.transform.OutputKeys;
  9. import javax.xml.transform.Transformer;
  10. import javax.xml.transform.TransformerConfigurationException;
  11. import javax.xml.transform.TransformerException;
  12. import javax.xml.transform.TransformerFactory;
  13. import javax.xml.transform.dom.DOMSource;
  14. import javax.xml.transform.stream.StreamResult;
  15.  
  16. import org.w3c.dom.Document;
  17. import org.w3c.dom.Element;
  18. import org.w3c.dom.Node;
  19. import org.w3c.dom.NodeList;
  20. import org.xml.sax.SAXException;
  21.  
  22. public class ParseXml {
  23. private Document document;
  24. //获取DOM树
  25. public void getDom(){
  26. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  27. DocumentBuilder builder;
  28. try {
  29. builder = factory.newDocumentBuilder();
  30. document = builder.parse("收藏信息.xml");
  31. } catch (ParserConfigurationException e) {
  32. e.printStackTrace();
  33. } catch (SAXException e) {
  34. e.printStackTrace();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39.  
  40. //遍历XML信息
  41. public void showInfo(){
  42. NodeList nodes = document.getElementsByTagName("Brand");
  43. for(int i=0;i<nodes.getLength();i++){
  44. Node node = nodes.item(i);
  45. Element ele = (Element)node;
  46. String brandName = ele.getAttribute("name");
  47. System.out.println(brandName);
  48.  
  49. NodeList types = ele.getChildNodes();
  50. for(int j=0;j<types.getLength();j++){
  51. Node typeNode = types.item(j);
  52. //如果节点是元素节点时再类型转换
  53. if(typeNode.getNodeType() == Node.ELEMENT_NODE){
  54. Element typeEle = (Element)typeNode;
  55. String typeName = typeEle.getAttribute("name");
  56. System.out.println(typeName);
  57. }
  58. }
  59.  
  60. }
  61.  
  62. }
  63.  
  64. //保存XML
  65. public void saveXml(String path){
  66. TransformerFactory factory = TransformerFactory.newInstance();
  67. try {
  68. //获取解析器
  69. Transformer transformer = factory.newTransformer();
  70. //指定特定的输出格式
  71. transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
  72. //源
  73. DOMSource source = new DOMSource(document);
  74. //目标
  75. StreamResult result = new StreamResult(new FileOutputStream(path));
  76. //解析
  77. transformer.transform(source, result);
  78.  
  79. } catch (TransformerConfigurationException e) {
  80. e.printStackTrace();
  81. } catch (FileNotFoundException e) {
  82. e.printStackTrace();
  83. } catch (TransformerException e) {
  84. e.printStackTrace();
  85. }
  86.  
  87. }
  88.  
  89. //向XML添加节点
  90. public void addEle(){
  91. Element Brand = document.createElement("Brand");
  92. Brand.setAttribute("name", "三星");
  93. Element type = document.createElement("type");
  94. type.setAttribute("name", "s120");
  95. Brand.appendChild(type);
  96. document.getElementsByTagName("PhoneInfo").item(0).appendChild(Brand);
  97. saveXml("收藏信息.xml");
  98. }
  99.  
  100. //修改XML元素,为每个Brand节点添加一个ID属性,分别为0,1,2
  101. public void updateEle(){
  102. NodeList brand = document.getElementsByTagName("Brand");
  103. for(int i=0;i<brand.getLength();i++){
  104. Node node = brand.item(i);
  105. Element ele = (Element)node;
  106. ele.setAttribute("id", i+"");
  107. }
  108. saveXml("收藏信息.xml");
  109. }
  110.  
  111. //删除手机品牌为华为的相关元素
  112. public void deleteEle(){
  113. NodeList brand = document.getElementsByTagName("Brand");
  114. for(int i=0;i<brand.getLength();i++){
  115. Node node = brand.item(i);
  116. Element brandEle = (Element)node;
  117. if(brandEle.getAttribute("name").equals("华为")){
  118. brandEle.getParentNode().removeChild(brandEle);
  119. }
  120. }
  121. saveXml("收藏信息.xml");
  122. }
  123.  
  124. public static void main(String[] args) {
  125. ParseXml px = new ParseXml();
  126. px.getDom();
  127. px.showInfo();
  128. // px.saveXml("wjb.xml");
  129. // px.addEle();
  130. px.updateEle();
  131. px.deleteEle();
  132. }
  133.  
  134. }

DOM解析示例的更多相关文章

  1. dom4j解析示例

    收藏信息.xml <?xml version="1.0" encoding="GB2312" standalone="no"?> ...

  2. PHP Simple HTML DOM解析器

    一直以来使用php解析html文档树都是一个难题.Simple HTML DOM parser 帮我们很好地解决了使用 php html 解析 问题.可以通过这个php类来解析html文档,对其中的h ...

  3. JavaEE XML DOM解析之DOM4J

    DOM解析之DOM4J @author ixenos DOM4J常用API 读取xml文档: Document doc = new SAXReader().read("xml文件" ...

  4. JavaEE XML DOM解析

    DOM解析XML @author ixenos XML解析方式(原理) a)     DOM 解析树 b)     SAX  流事件 DOM解析对应主流工具 i.          DOM(官方) i ...

  5. Java XML DOM解析(xPath)

    (一) XML概念 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的 ...

  6. PHP Simple HTML DOM解析器使用入门

    http://www.cnphp.info/php-simple-html-dom-parser-intro.html 一直以来使用php解析html文档树都是一个难题.Simple HTML DOM ...

  7. 用DOM解析XML ,用xpath快速查询XML节点

    XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系.用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西. ...

  8. java拾遗1----XML解析(一) DOM解析

    XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...

  9. XML解析(一) DOM解析

    XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...

随机推荐

  1. Android Studio导入第三方类库的方法

    Android Studio导入第三方类库的方法 本人也刚刚开始尝试做android app的开发,听说android studio是Google支持的android 应用开发工具,所以想应该肯定比E ...

  2. sublime text快捷键

    Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+M:跳转到对应括号Ctrl+K+B:开关侧栏Ctrl ...

  3. java常用工具

    /** * 将字节数组转换成字符串 * @param array 字节数组 * @return String */ public static String byte2str(byte[] array ...

  4. react+redux官方实例TODO从最简单的入门(2)-- 增

    虽然官网的TodoList的例子写的很详细,但是都是一步到位,就是给你一个action,好家伙,全部都写好了,给你一个reducer,所有功能也是都写好了,但是我们这些小白怎么可能一下就消化那么多,那 ...

  5. SQL分组多列统计(GROUP BY后按条件分列统计)

    as tjsl from fyxx group by zt,whbmbh end) as ybhsl from fyxx group by whbmbh 下面是摘自别人的博客 最近遇到一个问题,需要对 ...

  6. Windows 10(64位)配置Caffe运行环境的基本流程

    最新博客地址已搬家到: http://blog.csdn.net/zzlyw/article/details/53215148

  7. Libvlc API 简单说明 [转]

    Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...

  8. 设置redis主从出现的问题

    314:S 05 Jan 15:12:17.433 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc ...

  9. 【JavaScript】JS 中 原始字符串 和 HTML 字符转换

    参考资料:http://www.sjyhome.com/javascript/js-html-escape.html JS转换HTML转义符 SJY • 发表于:2013年10月05日 17:04 • ...

  10. css-关于文本

    1. 使用 text-overflow:ellipsis; 超出部分会变成省略号 http://www.w3school.com.cn/tiy/t.asp?f=css3_text-overflow 1 ...