Java開發筆記(一百零九)XML報文的定義和解析

2021-09-24 09:25:18 字數 1542 閱讀 3786

前面介紹了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是每個資料夾裡面都包含乙個隱藏的....