前面介紹了json格式的報文解析,雖然json串短小精悍,也能有效表達層次結構,但是每個元素只能找到對應的元素值,不能體現更豐富的樣式特徵。比如某個元素除了要傳輸它的字串文字,還想傳輸該文字的型別、字型大小、字型顏色等特徵,且這些額外的風格樣式與業務邏輯無關,自然不適合為它們單獨設立引數字段。倘若採用json格式定義包括樣式特徵在內的文字元素,要麼摒棄風格樣式這種附加屬性,要麼將風格樣式單列為專門的字段引數,然而不管哪種做法,都未能妥善解決附加屬性的表達問題。可見輕量級的json格式依然存在力不從心的情況,為此人們早早發明了擁有強大表示能力的xml格式,xml的全稱是「extensible markup language」(可擴充套件標記語言),它不但支援結構化資料的描述,還支援各類附加屬性的定義,非常適合在網路中傳輸資訊。
下面先看乙個xml報文格式的購物訂單樣例:12
3456
78910
1112
1314
1516
1718
1920
2122
2324
25<?xml version="1.0" encoding="gbk"?> 思無邪
桃花島水簾洞123號 15960238696 mate30 1 8888 格力**空調 1 58000 紅蜻蜓皮鞋 3 999
接著對上面的xml樣例庖丁解牛,分析一下xml格式都有哪些特點,分析結果羅列如下:
1、每個元素依然由引數名稱和引數值組成,引數名稱為尖括號所包裹,且分為標記頭與標記尾兩部分,標記尾在尖括號內部多了個斜桿。如此一來,乙個欄位的完整形式為「《引數名稱》引數值仍以前述的xml報文為例,下面是採用dom4j解析該xml串的**例子:12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
3334
3536
3738
3940
41// 通過dom4j解析xml串
private static goodsorder testparserbydom4j(string xml)
// 列印子節點的詳細資訊,包括節點名稱、節點值、屬性名稱、屬性值
system.out.println(string.format(「節點名稱=%s, 節點值=%s, 屬性名稱=%s, 屬性值=%s」,
node_name, node_value, attr_name, attr_value));
}接下來在原先的xml解析**裡補充如下的一行屬性解析**:12
// 列印user_info節點的name子節點的type屬性值
printvalueandattr(user_info, 「name」, 「type」);
再次執行xml解析**,在輸出的購物訂單日誌中觀察到多了下面這行日誌,表示解析到了name節點的type屬性值:
1節點名稱=name, 節點值=思無邪, 屬性名稱=type, 屬性值=string
原文:
Java並行開發筆記1
加鎖機制既可以確保可見性又可以確保原子性,而volatile變數只能確保可見性。當前僅當滿足一下所有條件時,才應該使用volatile變數 執行緒封閉 當訪問共享的可變資料時,通常需要使用同步。一種避免使用同步的方式就是不共享資料。如果僅在單執行緒內訪問資料,就不需要同步。這種技術被稱為執行緒封閉 ...
Java並行開發筆記6
對於持有執行緒的服務,只要服務的存在時間大於建立執行緒的方法的存在時間,那麼就應該提供生命週期方法。在下面的程式中給出了乙個簡單的日誌服務示例,其中日誌操作在單獨的日誌執行緒中執行。產生日誌訊息的執行緒並不會將訊息直接寫入輸出流,而是由logwriter通過blockingqueue將訊息提交給日誌...
Android 開發筆記
版本控制的注意事項 以下資料夾不要加入版本控制 bin bin是編譯的二進位制檔案的存放路徑 gen gen是android需要的資源檔案的原始檔存放的目錄 使用svn的時候要注意專案編譯的問題 在編譯的時候程式會把src資料夾裡面的檔案拷貝到bin裡面,但是svn是每個資料夾裡面都包含乙個隱藏的....