XML-Attribute vergleichen

ahunzs

Mitglied
Hallo zusammen!

Ich arbeite momentan mit XML und SAX. Mein Auftrag lautet, mit der Hilfe von SAX einige Elemente auszulesen und in der Konsole auszugeben. hier ein Ausschnitt aus dem XML- File:
[XML=221]
<dax😛roductPropertyDefinition name="fqCode" saleRelevance="false" use="singleOptional">
<dax:label lang="ALL">1. FQ-Code</dax:label>
</dax😛roductPropertyDefinition>
<dax😛roductPropertyDefinition name="destination" saleRelevance="true" use="singleRequired">
<dax:label lang="GER">Bestimmung</dax:label>
<dax:label lang="FRA">destination</dax:label>
<dax:label lang="ITA">destinazione</dax:label>
</dax😛roductPropertyDefinition>
<dax😛roductPropertyDefinition name="origin" saleRelevance="true" use="singleRequired">
<dax:label lang="GER">Abgang</dax:label>
<dax:label lang="FRA">départ</dax:label>
<dax:label lang="ITA">partenza</dax:label>
</dax😛roductPropertyDefinition>
[/XML]

Nun möchte ich gerne wissen, wie ich das Attribut "name" ausgeben lassen kann. Und zwar nur dann, wenn der Wert des Attributes "destination" und/oder "origin" ist.

Ich hoffe, ihr könnt mir helfen. Hier ist noch die startElement-Methode der Java Klasse von mir.

[JAVA=35]
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (qName.equals("dax:articleId")) {
// System.out.print("<" + atts);
for (int index = 0; index < atts.getLength(); index++) {
System.out.println(atts.getLocalName(index) + " " + atts.getValue(index));
}
if (qName.equals("dax😛roductPropertyDefinition")) {
if (atts.getValue(0) == "origin") {
System.out.println(atts.getLocalName(0) + " " + atts.getValue(0));
}
}
}
}[/code]

Irgendwo mache ich einen groben Denkfehler. Ich habe im Moment ein Brett vor dem Kopf. Aber ich bin auch sonst nicht so der JAVA-Crack :noe:

Gruss
Ahunzs
 
Zuletzt bearbeitet von einem Moderator:
Strings vergleicht man mit equals, wie du es in anderen Zeilen auch korrekt hast..

gib auch atts.getValue(0) aus, wer weiß ob das das ist was du brauchst,
 
zuerst einmal, vielen Dank für die Antwort. Leider funktioniert das Ganze noch nicht so wie gewollt.
bisher erzeugt die Ausführung des Programms folgende Ausgabe:

Code:
tariffCode 011
id 361
tariffCode 011
id 125
tariffCode 011
id 8244
tariffCode 011
id 5510
tariffCode 011
id 8242
tariffCode 011
id 4557
tariffCode 011
id 1865
tariffCode 011
id 1872
tariffCode 011
id 30
...

Und das Ausgeben von atts.getValue(0) ist ja in der Zeile 43 auch vorhanden.

Gruss
Ahunzs
 
> Und das Ausgeben von atts.getValue(0) ist ja in der Zeile 43 auch vorhanden.

erst wenn das if erfüllt ist, was doch offensichtlich dein Problem ist?
schaue dir VOR dem Vergleich an WAS du da überhaupt vergleichst

edit:
in Zeile 39 hast du ja anscheinend auch eine Ausgabe der Attribute,
alles sieht wenig nach dem geposteten XML aus, oder siehst du durch?

fange mit einem einfach aufgebauten XML an, gib auch localName aus usw.,
bevor es an Attribute geht wäre es schon günstig zu wissen wo man im Baum ist
 
Zuletzt bearbeitet von einem Moderator:
Nun hat es Funktioniert. Ich musste wirklich einfach nur den Code folgendermassen anpassen!

Java:
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {

        if (qName.equals("dax:articleId")) {
            for (int index = 0; index < atts.getLength(); index++) {
                System.out.println(atts.getLocalName(index) + " " + atts.getValue(index));
            }
        }

        if (qName.equals("dax:productPropertyDefinition")) {
            if (atts.getValue(0).equals("destination")||atts.getValue(0).equals("origin")) {
                System.out.println(atts.getLocalName(0) + " " + atts.getValue(0));
                System.out.println("Typ: ZONEBASED");
                System.out.println("_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-");
            }
        }
    }

Danke für deine Hilfe! 🙂
 

Zurück
Oben