2013年6月12日 星期三

StringReader with jdom

同樣以上一個 XML 檔為例子,這邊說明 XML 除了可以以網路、檔案讀入之外,亦可使用 String 方式讀入,但這邊需要用另外一種方法進行讀取。(利用 StringReader class 類別)

public static void main(String[] args) throws IOException, JDOMException {
// SAX
SAXBuilder sax = new SAXBuilder();
// 使用 String 時,須利用 StringReader
Document doc = sax.build(new StringReader(xmlString));
// 取得 xml 的 root element
Element root = doc.getRootElement();
// 使用 foreach 開始進行走訪
Iterator<Element> items = root.getChildren().iterator();

// 根節點
System.out.println(root.getName());
while (items.hasNext()) {
Element e = items.next();

// 印出下一個 text
System.out.println(e.getText());

// 使用 foreach 開始進行走訪
Iterator<Element> item = e.getChildren().iterator();
while (item.hasNext()) {
Element e2 = item.next();

// 印出下一個 text
System.out.println(e2.getText().trim());
}
}
}

2013年6月10日 星期一

XML Tree parse with jdom (SAX)

這邊利用了 jdom third library 來進行 XML 的解析,並利用 SAX 方式來處理。
程式碼大概是這樣子,且下面附有此 XML Tree 樹狀結構 !


public class tmp {

/**
* @param args
* @throws IOException 
* @throws JDOMException 
* @throws MalformedURLException 
*/
public static void main(String[] args) throws MalformedURLException, JDOMException, IOException {
// DOM or SAX 選其一,這邊選擇 SAX
SAXBuilder bSax = new SAXBuilder();
// 開啟 XML 檔案,可用 inputstream、URL、File 等等
Document doc = bSax.build(new File("search_result_xml.rb.xml"));
// 取得根結點
Element root = doc.getRootElement();
Iterator<Element> guideIterator = root.getChildren().iterator();
// 開始進行走訪
while (guideIterator.hasNext()) {
Element items = guideIterator.next();
Iterator<Element> itemsIterator = items.getChildren().iterator();
// 子節點走訪
while (itemsIterator.hasNext()) {
Element item = itemsIterator.next();
System.out.println(item.getText()); // 最後印出資料 !
}
}
}
}

2013年6月9日 星期日

XML Parser Error - xmlParseEntityRef: no name

這邊的問題出在於 XML 的內容出現了非法自原,因此在資料部分必須用 <![CDATA[ ]]> 包起來。

ex.
原本 <test>內容在這</test>

<test><![CDATA[ 內容在這 ]]></test>

HTTP with XML

HTTP 有個 Content-Type 欄位,這欄位主要的用意在於告知瀏覽器如何解析資料

若要視作 XML 形式,則需要用 Content-Type: text/xml

正常 HTML 形式,則為 Content-Type: text/html

若是是純文字,則 Content-Type: text/plain

XML Parser Error - Extra content at the end of the document

若遇到 XML 解析時,出現 Extra content at the end of the document 訊息時,這可能代表你區少一個 root !

example:
<a>XXX</a>
<b>XXX</b>
<c>XXX</c>

你可能需要更改成此形式

<root>
<a>XXX</a>
<b>XXX</b>
<c>XXX</c>
</root>

2013年6月7日 星期五