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;
    }

}
¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top