日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SAX解析xml (遍历DOM树各节点)

發布時間:2025/7/14 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAX解析xml (遍历DOM树各节点) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文參考?http://yangjunfeng.iteye.com/blog/401377

?

1. books.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <bk:books count="3" xmlns:bk="http://test.org/books"> 3 <!--books's comment --> 4 <bk:book id="1"> 5 <bk:name>Thinking in JAVA</bk:name> 6 </bk:book> 7 <bk:book id="2"> 8 <bk:name>Core JAVA2</bk:name> 9 </bk:book> 10 <bk:book id="3"> 11 <bk:name>C++ primer</bk:name> 12 <addr:address xmlns:addr="http://test.org/address"> 13 <addr:state>China</addr:state> 14 <addr:city>ShangHai</addr:city> 15 </addr:address> 16 </bk:book> 17 </bk:books>

?

xml文件基本結構:

<books>Text文本節點("\n\t"換行+制表符)

  <book>Text文本節點("\n\t\t"換行+2個制表符)

    <name>Text文本節點("Thinking in JAVA")</name>Text文本節點("\n\t"換行+制表符)

  </book>

.......

.......

</books>

?

2. 使用SAX api 解析xml

1 package sax.parsing.example; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.Reader; 7 8 import org.testng.annotations.Test; 9 import org.xml.sax.Attributes; 10 import org.xml.sax.ContentHandler; 11 import org.xml.sax.InputSource; 12 import org.xml.sax.Locator; 13 import org.xml.sax.SAXException; 14 import org.xml.sax.XMLReader; 15 import org.xml.sax.helpers.XMLReaderFactory; 16 17 import bsh.This; 18 19 20 class MyContentHandler implements ContentHandler { 21 22 private StringBuffer stringBuffer; 23 int frontBlankCount = 0; 24 25 26 public String toBlankString(int count) { 27 StringBuffer buffer = new StringBuffer(); 28 for (int i=0; i<count; i++) 29 buffer.append(" "); 30 return buffer.toString(); 31 } 32 33 @Override 34 public void setDocumentLocator(Locator locator) { 35 System.out.println(this.toBlankString(this.frontBlankCount) 36 + ">>> set document_locator : (lineNumber = " + locator.getLineNumber() 37 + ", columnNumber = " + locator.getColumnNumber() 38 + ", systemId = " + locator.getSystemId() 39 + ". publicId = " + locator.getPublicId() 40 + ")" 41 ); 42 } 43 44 @Override 45 public void startDocument() throws SAXException { 46 System.out.println(this.toBlankString(frontBlankCount) + ">>> start document"); 47 } 48 49 @Override 50 public void endDocument() throws SAXException { 51 System.out.print(this.toBlankString(frontBlankCount) + ">>> end document"); 52 } 53 54 @Override 55 public void startPrefixMapping(String prefix, String uri) throws SAXException { 56 System.out.println("\n" + this.toBlankString(this.frontBlankCount) 57 + ">>> start prefix_mapping : xmlns:" + prefix + "=\"" + uri + "\""); 58 } 59 60 @Override 61 public void endPrefixMapping(String prefix) throws SAXException { 62 System.out.print("\n" + this.toBlankString(this.frontBlankCount) + ">>> end prefix_mapping : " + prefix); 63 } 64 65 @Override 66 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { 67 System.out.print(this.toBlankString(this.frontBlankCount++) + ">>> start element : " 68 + qName + "(" + uri + ")" 69 ); 70 } 71 72 @Override 73 public void endElement(String uri, String localName, String qName) throws SAXException { 74 System.out.print(this.toBlankString(--this.frontBlankCount) + ">>> end element : " 75 + qName + "(" + uri + ")" 76 ); 77 } 78 79 /** 80 * Text文本節點 處理 81 */ 82 @Override 83 public void characters(char[] ch, int start, int length) throws SAXException { 84 85 StringBuffer buffer = new StringBuffer(); 86 87 for (int i=start; i<start+length; i++) { 88 switch (ch[i]) { 89 case '\\': buffer.append("\\\\");break; 90 case '\r': buffer.append("\\r");break; 91 case '\n': buffer.append("\\n");break; 92 case '\t': buffer.append("\\t");break; 93 case '\"': buffer.append("\\\"");break; 94 default: buffer.append(ch[i]); 95 } 96 } 97 System.out.println("\t>>> characters(" + length + "): " + buffer.toString()); 98 } 99 100 @Override 101 public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { 102 103 StringBuffer buffer = new StringBuffer(); 104 105 for (int i=start; i<start+length; i++) { 106 switch (ch[i]) { 107 case '\\': buffer.append("\\\\");break; 108 case '\r': buffer.append("\\r");break; 109 case '\n': buffer.append("\\n");break; 110 case '\t': buffer.append("\\t");break; 111 case '\"': buffer.append("\\\"");break; 112 default: buffer.append(ch[i]); 113 } 114 } 115 System.out.print(this.toBlankString(frontBlankCount) 116 + ">>> ignorable whitespace(" + length + "): " + buffer.toString()); 117 } 118 119 @Override 120 public void processingInstruction(String target, String data) throws SAXException { 121 System.out.print(this.toBlankString(this.frontBlankCount) 122 + ">>> process instruction : (target = \"" + target + "\", data = \"" + data + ")"); 123 124 } 125 126 @Override 127 public void skippedEntity(String name) throws SAXException { 128 System.out.print(this.toBlankString(this.frontBlankCount) + ">>> skipped_entity : " + name); 129 } 130 } 131 132 public class SaxTest { 133 134 135 @Test 136 public void test() throws SAXException, FileNotFoundException, IOException { 137 138 139 XMLReader reader = XMLReaderFactory.createXMLReader(); 140 reader.setFeature("http://xml.org/sax/features/validation", true); 141 reader.setFeature("http://xml.org/sax/features/namespaces", true); 142 reader.setContentHandler(new MyContentHandler()); 143 reader.parse(new InputSource(new FileInputStream("src/sax/parsing/example/books.xml"))); 144 145 } 146 }

輸出結果:

>>> set document_locator : (lineNumber = 1, columnNumber = 1, systemId = null. publicId = null)
>>> start document
[Error] :5:10: Document is invalid: no grammar found.
[Error] :5:10: Document root element "bk:books", must match DOCTYPE root "null".

>>> start prefix_mapping : xmlns:bk="http://test.org/books"
>>> start element : bk:books(http://test.org/books) >>> characters(2): \n\t
  >>> start element : bk:book(http://test.org/books) >>> characters(3): \n\t\t
    >>> start element : bk:name(http://test.org/books) >>> characters(16): Thinking in JAVA
    >>> end element : bk:name(http://test.org/books) >>> characters(2): \n\t
  >>> end element : bk:book(http://test.org/books) >>> characters(2): \n\t
  >>> start element : bk:book(http://test.org/books) >>> characters(3): \n\t\t
    >>> start element : bk:name(http://test.org/books) >>> characters(10): Core JAVA2
    >>> end element : bk:name(http://test.org/books) >>> characters(2): \n\t
  >>> end element : bk:book(http://test.org/books) >>> characters(2): \n\t
  >>> start element : bk:book(http://test.org/books) >>> characters(3): \n\t\t
    >>> start element : bk:name(http://test.org/books) >>> characters(10): C++ primer
    >>> end element : bk:name(http://test.org/books) >>> characters(3): \n\t\t

    >>> start prefix_mapping : xmlns:addr="http://test.org/address"
    >>> start element : addr:address(http://test.org/address) >>> characters(4): \n\t\t\t
      >>> start element : addr:state(http://test.org/address) >>> characters(5): China
      >>> end element : addr:state(http://test.org/address) >>> characters(4): \n\t\t\t
      >>> start element : addr:city(http://test.org/address) >>> characters(8): ShangHai
      >>> end element : addr:city(http://test.org/address) >>> characters(3): \n\t\t
    >>> end element : addr:address(http://test.org/address)
    >>> end prefix_mapping : addr >>> characters(2): \n\t
  >>> end element : bk:book(http://test.org/books) >>> characters(1): \n
>>> end element : bk:books(http://test.org/books)
>>> end prefix_mapping : bk>>> end document

?

轉載于:https://www.cnblogs.com/asnjudy/p/4236403.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的SAX解析xml (遍历DOM树各节点)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧美一区二区三区 | 爱逼综合网| 久久久久久久一区二区三区 | 国产精品传媒在线 | 在线超碰| 开心激情网五月天 | 伊人69| 日本不卡网 | 一级片视频网站 | 亚洲精品中字 | 国产一区二区综合 | 久久精品五月天 | 狠狠躁狠狠躁视频专区 | 老外黄色一级片 | 夜夜骑日日操 | 九色网站在线观看 | xxx一区二区| 男男play呻吟动漫网站 | 国产人成免费视频 | 国产精品免费一区二区三区都可以 | 国产福利免费 | 日韩在线观看视频一区 | 在线观看成人一区 | 福利二区三区 | 东京av在线| 香蕉网站在线观看 | 亚洲88av | 国产成人97精品免费看片 | 无码人妻精品丰满熟人区 | 欧美性欧美zzzzzzzzz | 在线免费一区二区 | 欧美日韩中字 | 精人妻一区二区三区 | 日本特黄视频 | 在线观看免费的av | 久久888 | 成人在线免费看视频 | 婷婷色中文字幕 | 青青草视频观看 | 6680新视觉电影免费观看 | 在线三区| 久久精品国产亚洲av麻豆 | av片在线免费看 | 日韩片在线 | 黄色在线视频网址 | 国产日韩欧美一区二区东京热 | 国产精品白浆一区二小说 | 蜜桃视频在线网站 | 九九热视频精品在线观看 | 广州毛片 | 免费禁漫天堂a3d | 国产精品成人av性教育 | 亚洲精品字幕在线观看 | 91成人在线观看喷潮蘑菇 | 少妇一级淫片免费放2 | 高潮一区二区三区乱码 | 蜜臀aⅴ国产精品久久久国产老师 | www.777含羞草 | 欧美乱妇日本无乱码特黄大片 | 日本久久激情 | 影音先锋成人资源网站 | 亚洲成a人v | 无遮挡无掩盖网站 | 欧美日韩在线免费视频 | 亚洲av无码精品色午夜 | 亚洲精品一区二区二区 | 游戏涩涩免费网站 | 欧美自拍一区 | www.国产在线视频 | 香蕉国产精品 | 欧美精品一级片 | av无遮挡 | 欧美色图影院 | 在线视频a | 人人爽人人干 | 成人国产片女人爽到高潮 | 三级在线国产 | 黄视频网站在线看 | 日本新japanese乱熟 | 丁香激情综合 | 欧美亚洲色综久久精品国产 | 亚洲精品亚洲人成人网 | 欧美xxxxx牲另类人与 | 97人人精品 | 精品国产黄色 | 天堂中文在线免费观看 | 欧美黑人欧美精品刺激 | 国产女人18毛片 | 久久亚州 | 综合在线亚洲 | 亚洲综合激情网 | 欧美中文字幕在线视频 | 精品日韩在线播放 | 久久精品国产99国产 | 星空大象在线观看免费播放 | 激情六月天婷婷 | 麻豆av在线免费观看 | 欧美专区日韩专区 | 奇米精品一区二区三区在线观看 |