Problema con el uso de SAX XML Parser
Pregunta
Estoy usando el analizador de saxo para el análisis XML. El problema es para el siguiente código 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>
Entiendo esto:
Designer:Paul Smith
Color:Plain Black
Faltan las otras partes. Lo mismo sucede para algunas otras líneas. ¿Alguien puede decirme amablemente cuál es el problema con mi enfoque?
Mi código se da a continuación:
Código de analizador:
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);
}
OBJETO para mantener la información analizada 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>();
}
Clase de controlador:
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;
}
}
Solución
Tienes que concatenar personajes que te da el analizador hasta que llame endElement
.
Intenta quitar currentElement = false;
de characters
manejador y
currentValue = currentValue + new String(ch, start, length);
Inicializar currentValue
con una cadena o mango vacío null
valor en la expresión anterior.
Otros consejos
Creo que los personajes leen algunos, pero no todos los personajes al mismo tiempo. Por lo tanto, solo obtienes el primer "trozo". Intente imprimir cada fragmento de personaje en una línea separada, como depuración (antes del IF).