2011-09-01 68 views
4

我一直在搜索和閱讀SO,但沒有任何工作。我在XML Feed中遇到了字符問題。我將每個標籤的值保存在一個String中,但是當
發生時,它就停止。我只在標籤中獲得4-5個第一個單詞。在Java中解析XML時從字符串中刪除無效字符

那麼任何人都可以請幫我一個可以刪除它的方法嗎?或者,XML Feed中的標籤中的文本是否對於字符串來說太長?

謝謝!

示例代碼:

public void characters(char[] ch, int start, int length) 
     throws SAXException { 

    if (currentElement) { 
     currentValue = new String(ch, start, length); 
     currentElement = false; 
    } 

} 

public void endElement(String uri, String localName, String qName) 
     throws SAXException { 

    currentElement = false; 

    /** set value */ 
    if (localName.equalsIgnoreCase("title")) 
     sitesList.setTitle(currentValue); 
    else if (localName.equalsIgnoreCase("id")) 
     sitesList.setId(currentValue); 
    else if(localName.equalsIgnoreCase("description")) 
     sitesList.setDescription(currentValue); 
} 

在描述標籤的文字是很長,但我的
字符之前僅獲得第五個字開始到來。

+1

你可以顯示你的代碼的相關部分,以及你看到的是什麼樣的無效字符? –

回答

1

您正在使用SAXparser來解析XML字符串。

characters() -method只能讀取一個XML元素時可以多次調用。發生這種情況時發現像<desc>blabla bla & # 39; bla bla la.</desc>

的解決方案是使用一個StringBuilder並在characters() - 方法追加readed字符,然後重置StringBuilderendElement() - 方法:

private class Handler extends DefaultHandler{ 

    private StringBuilder temp_val; 

    public Handler(){ 
     this.temp_val = new StringBuilder(); 
    } 

    public void characters(char[] ch, int start, int length){ 
     temp_val.append(ch, start, length); 
    } 

    public void endElement(String uri, String localName, String qName){ 
     System.out.println("Output: "+temp_val.toString()); 
     // ... Do your stuff 
     temp_val.setLength(0); // Reset the StringBuilder 
    } 

} 

上面的代碼對我的作品,給這個XML的文件:

<?xml version="1.0" encoding="iso-8859-1" ?> 
<test>This is some &#13; example-text.</test> 

輸出是:

輸出:這是一些
示例文本。

+0

所以當我設置值我應該使用temp_val.toString()? – Magnus

+0

嘗試使用StringBuilder,沒有工作。 – Magnus

+0

在'endElement()' - 方法中設置你的值,並在它結束時,你重置'StringBuilder'。請更具體地說明「不起作用」。 –