Parsowanie XML

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 30
0

Cześć,
Mam taki mały problem z parsowaniem XML. Po wpisaniu danego Stringa, ma wyświetlić jego wartość.
U mnie jest jednak błąd, bo wyświetla wszystkie wartości przypisane do "RBC, HGB, HCT, LYM, PLT or OB", po wpisaniu obojetnie jakiego Stringa.
Wiecie może co tu jest źle?

Kopiuj
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.Scanner;


public class ReadXMLFile extends DefaultHandler {
    public static String userChoice;
    public static String PATH = "/Users/szymo/Desktop/labDataExample.xml";

    public static void main(String[] args) {
        // TODO code application logic here

    	System.out.println("Select one of : RBC, HGB, HCT, LYM, PLT or OB");
    	
        Scanner s = new Scanner(System.in);
        userChoice = s.nextLine();
        
        
        

        try {

            SAXParserFactory factory = SAXParserFactory.newInstance();

            SAXParser saxParser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() {

                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                	switch (userChoice) {
                    case "RBC":  System.out.println("Value of RBC is " + attributes.getValue("value") + ".");
                             break;
                    case "HGB":  System.out.println("Value of HGB is " + attributes.getValue("value") + ".");
                             break;
                    case "HCT":  System.out.println("Value of HCT is " + attributes.getValue("value") + ".");
                             break;
                    case "LYM":  System.out.println("Value of LYM is " + attributes.getValue("value") + ".");
                             break;
                    case "PLT":  System.out.println("Value of PLT is " + attributes.getValue("value") + ".");
                             break;
                    case "OB":  System.out.println("Value of OB is " + 	 attributes.getValue("value") + ".");
                             break;
                }
                }
            };

            saxParser.parse(PATH, handler);

        } catch (Exception e) {
            e.printStackTrace();
        }
        }
    
    }

 
SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 30
0
Kopiuj
<labData patient="A1234" date="2011-03-13">
<Results>
<Par name="RBC" value="5.10"/>
<Par name="HGB" value="15.4"/>
<Par name="HCT" value="46.7"/>
<Par name="LYM" value="2"/>
<Par name="PLT" value="173"/>
<Par name="OB" value="3"/>
</Results>
</labData>
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

No i przecież ten kod w ogóle nie robi tego co opisałeś. Ty przecież NIGDZIE nie korzystasz z tej podanej przez usera wartości. Zawsze robisz attributes.getValue("value") więc czego sie niby spodziewasz? o_O że sie parser domyśli że akurat wywołałeś to z jakiegoś swojego switcha i że chciałbyś tylko konkretny element pobrać? o_O
Pokaż mi gdzie w kodzie sprawdzasz czy pole "name" z tego XMLa równa się temu co podał user.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.