使用XML pull-parser。它給你的XML文檔是它的邏輯部分,每部分的部分(事件)。因此,對於每個CardInfo元素,創建一個新的CardInto對象,併爲元素名稱「類型」設置了CardInfo類型和元素名稱「ID」你設定的CardInfo型等
更新 添加讀取和寫入方法到你的對象,或者創建一個獨立的類來讀/寫XML:
這個例子是針對StAX API的,但我想你會得到圖片(方法和事件類型是相同的,但是有不同的名字)。
在爲MyObject:
public void read(XMLStreamReader reader) throws XMLStreamException {
int event;
// read to the first tag, so we are at level 1
do {
event = reader.next();
if(event == XMLStreamConstants.START_ELEMENT) {
break;
}
} while(reader.hasNext());
int level = 1;
do {
event = reader.next();
if(event == XMLStreamConstants.START_ELEMENT) {
level++; // increment
String localName = reader.getLocalName();
if(localName.equals("Domain")) {
event = reader.next();
if(event == XMLStreamConstants.CHARACTERS) {
domain = reader.getText();
}
} else if(localName.equals("URL")) {
event = reader.next();
if(event == XMLStreamConstants.CHARACTERS) {
url = reader.getText();
}
} else if(localName.equals("Headers")) {
readHeaders(reader);
level--;
} else throw new IllegalArgumentException("Unexpected element " + localName + " at " + reader.getLocation());
}
if(event == XMLStreamConstants.END_ELEMENT) {
level--; // decrement
}
} while(level > 0); // simple level check
}
解析亞型稱爲標題:
<Headers>
<Header name="" value=""/>
<Header name="" value=""/>
<Header name="" value=""/>
</Headers>
使用的代碼
private void readHeaders(XMLStreamReader reader) throws XMLStreamException {
int level = 1;
int event;
do {
event = reader.next();
if(event == XMLStreamConstants.START_ELEMENT) {
level++;
String localName = reader.getLocalName();
if(localName.equals("Header")) {
CodeRequestHeader header = new CodeRequestHeader();
header.setName(reader.getAttributeValue(null, "name"));
header.setValue(reader.getAttributeValue(null, "value"));
headers.add(header);
}
} else if(event == XMLStreamConstants.END_ELEMENT) {
level--;
}
} while(level > 0);
}
現在有這樣的東西多種方式,但最重要的事情是這些:
- 首先轉到1級;讀根元素
- 開始一個do-while循環在1級
- 開始和結束元素遞增和遞減水平,使水平是正確的
- 使用來控制while循環的水平,繼續只要水平> 0
- 對於子元素(即某些標記包含映射到對象實體的多個標記),請創建一個重複步驟2-4的新方法。然後在使用該方法時將等級減1。
如果您使用這種模式,您可以以有序且嚴格,合理的方式拉解析n維XML文檔。嚴格地說,規則意味着應該是readHeaders方法中的'readHeader'方法,但是如果Header元素中沒有子元素,則不需要這樣做。玩得開心;)
這是粉碎 - 非常感謝指針! :D – Chris
我已經設法獲取流並使用XML拉解析器來獲取項目 - 在systemout上打印它們。我將如何創建所需的對象並存儲這些對象? – Chris
se更新回覆 – ThomasRS