2011-09-04 81 views
1

我正在使用SAX分析器進行XML分析。問題是下面的XML代碼:使用SAX XML分析器的問題

<description> 
Designer:Paul Smith Color:Plain Black Fabric/Composition:100% cotton  Weave/Pattern:pinpoint Sleeve:Long-sleeved Fit:Classic Front style:Placket front Back style:Side pleat back Collar:Classic/straight collar Button:Pearlescent front button Pocket:rounded chest pocket Hem:Rounded hem 
</description> 

我得到這個:

Designer:Paul Smith 
Color:Plain Black 

其他部分缺失。同樣的事情發生在其他幾條線上。任何人都可以告訴我我的方法有什麼問題嗎?

下面我的代碼給出:

解析器代碼:

try { 
     /** Handling XML */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 

     /** Send URL to parse XML Tags */ 
     URL sourceUrl = new URL(
     "http://50.19.125.224/Demo/VeryGoodSex_and_the_City_S6E6.xml"); 

     /** Create handler to handle XML Tags (extends DefaultHandler) */ 
     MyXMLHandler myXMLHandler = new MyXMLHandler(); 
     xr.setContentHandler((ContentHandler) myXMLHandler); 
     xr.parse(new InputSource(sourceUrl.openStream())); 

    } catch (Exception e) { 
     System.out.println("XML Pasing Excpetion = " + e); 
    } 

對象保存XML解析信息:

public class ParserObject { 

String name=null; 
String description=null; 
String bitly=null; //single 
String productLink=null;//single 
String productPrice=null;//single 
Vector<String> price=new Vector<String>(); 
} 

Handler類:

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


    currentElement = false; 


    if (qName.equalsIgnoreCase("title")) 
    { 
     xmlDataObject[index].name=currentValue; 
    } 

    else if (qName.equalsIgnoreCase("artist")) 
    { 
     xmlDataObject[index].artist=currentValue; 
    } 

} 


public void startElement(String uri, String localName, String qName, 
Attributes attributes) throws SAXException { 


    currentElement = true; 

    if (qName.equalsIgnoreCase("allinfo")) 
    { 
     System.out.println("started"); 
    } 

    else if (qName.equalsIgnoreCase("tags")) 
    { 
     insideTag=1; 
    } 

} 

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

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

} 
+2

[JAVA SAX解析器拆分調用字符()]的可能重複(http://stackoverflow.com/questions/4567636/java-sax-parser-split-calls-to-characters) – bmargulies

回答

2

您必須連接解析器提供給您的字符,直到它調用endElement

嘗試從characters處理除去currentElement = false;,和

currentValue = currentValue + new String(ch, start, length); 

初始化currentValue與空字符串或處理在上面的表達式null值。

1

我想字符讀取如此我,但不是所有的角色在同一時間。 因此,你只能得到第一個「塊」。 嘗試在單獨的行上打印每個字符塊,作爲調試(在if之前)。