解析XML文件,鑑於此XML文件:Confussion在Java
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<track clipid="1">
<url>http://www.emp3world.com/to_download.php?id=33254</url>
<http_method>GET or POST</http_method>
<post_body>a=1&b=2&c=3</post_body>
</track>
</data>
</root>
我所追求的是從這個XML文件打印是這樣的:
ID: 1
URL: http://www.emp3world.com/to_download.php?id=33254
Http method: GET or POST
目前,這是我的原始處理程序代碼:
class MyHandler extends DefaultHandler
{
String str = "";
StringBuilder s = new StringBuilder();
public void startElement(String namespaceURI, String sName, String qName, Attributes atts)
{
if(qName.equals("track"))
{
s.append("ID: ").append(atts.getValue("clipid")).append("\n");
}
if(qName.equals("url"))
{
s.append("URL: ");
}
if(qName.equals("http_method"))
{
s.append("Http method: ");
}
}
public void endElement(String uri, String localName, String qName)
{
if(qName.equals("url"))
{
s.append(str).append("\n");
str = "";
}
if(qName.equals("http_method"))
{
s.append(str).append("\n");
str = "";
}
System.out.println(s);
}
public void characters(char[] ch, int start, int length) throws SAXException {
str = new String(ch, start, length);
}
}
我的問題是,它總是打印結果4次(第一次沒有Http方法字段。這對所有Sax Parsers初學者來說都是一個問題。
我知道startElement,endElement,characters函數是做什麼的,但正如你所看到的,我不知道如何正確使用它們。我應該在我的代碼中更改什麼,以便我可以獲得正確的輸出結果?
謝謝。
4次因爲使用從'endElement'而不是'endDocument'調用'System.out.println(s)'。正如NathanHughes提到的,你必須將文本內容累加到StringBuilder中,因爲它可能由多個'字符'表示,請致電 –
好的,謝謝你解釋了 – Kobe