2017-08-30 35 views
1

薩克斯解析XML文件有一些問題。這裏有 Java使用sax解析xml文件。無法獲得正確的內容時,出現&

的Java代碼這樣的代碼

的某些部分:

boolean rcontent = false; 

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    if (qName.equalsIgnoreCase("content")) { 
     rcontent = true; 
    } 
} 

@Override 
public void characters(char ch[], int start, int length) throws SAXException { 
    if (rcontent){ 
     System.out.println("content: " + new String(ch, start, length)); 
     rcontent = false; 
    } 
} 

的Xml文件內容是這樣的: enter image description here

但輸出是:

我想說

這是不完整的。

回答

2

對於單個<content>塊,可能會多次調用characters(...)。嘗試像

StringBuilder builder; 

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    if (qName.equalsIgnoreCase("content")) { 
     builder = new StringBuilder(); 
    } 
} 

@Override 
public void characters(char ch[], int start, int length) throws SAXException { 
    if (builder != null){ 
     builder.append(new String(ch, start, length)); 
    } 
} 

@Override 
public void endElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    if (builder != null) { 
     System.out.println("Content = " + builder); 
     builder = null; 
    } 
} 
+0

乾杯!它工作得很好!但爲什麼字符(...)被多次調用一個標籤?這是因爲它滿足並且它有最大的尺寸嗎? –

+0

閱讀[javadocs](https://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/DefaultHandler.html#characters(char [],%20int,%20int))其中指出字符數據是「分塊」的。通常這樣做是爲了避免在內存中不必要地使用大字符數組。我猜不同的薩克斯解析器可以選擇不同的塊來區分字符,所以你不應該依賴分塊實現。 –