2017-05-11 1 views
0

Ich habe eine XML-Datei feed.xml genannt und ich bin mit DOM-Paket auf JAVA Daten verschrotten.IF-Anweisung getElementsByTagName() Wert auf XML-DOM-Java mit

Ich konnte Daten erfolgreich verschrotten, und jetzt muss ich in der Lage sein, IF-Anweisungen zu erstellen, abhängig von den Daten, die ich aus dem XML erhalte.

Mein Problem ist, dass sogar wenn ich die Attributdaten in einer String-Variablen zuweisen, wenn ich mit IF vergleichen, gibt die Bedingung FALSE zurück, wenn es eigentlich richtig sein sollte.

Dies ist einige meiner XML

<inventory> 
    <item UnitID="1234" Record="0"> 
     <id>1234</id> 
     <dealerid>455</dealerid> 
     <stock_number>1600Xtreme</stock_number> 
     <make>Nvidia</make>      
    </item> 
    <item UnitID="7854" Record="1"> 
     <id>7854</id> 
     <dealerid>587</dealerid> 
     <stock_number>12TMAX5500</stock_number> 
     <make>Realtek</make> 
    </item> 
</inventory> 

Dieses einige meiner JAVA-Code ist es, Daten für Schaben und auch die IF-Anweisung Ich gebe vor, zu verwenden:

File fXmlFile=new File("feed.xml"); 
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder(); 
Document doc=dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 
NodeList nList=doc.getElementsByTagName("item"); 
for (int temp=0; temp < nList.getLength(); temp++) 
{ 
    Node nNode=nList.item(temp); 
    Element eElement2=(Element)nNode; 
    String search="Nvidia"; 
    System.out.println("This is the value to search from my variable: " + 
    search); //This prints Nvidia 
    String toTest=(eElement2.getAttribute("make")); 
    System.out.println("toTest is equal to: " + toTest); //This prints 
    Nvidia 
    if (toTest == search) 
    { 
     System.out.println("The condition on the IF is True"); 
    } 
} 

ich als Ausgabe erhalten soll : "Die Bedingung auf der IF ist True"

Allerdings bekomme ich nichts, da nach JAVA nicht wahr ist.

Ich habe recherchiert und viele verschiedene Möglichkeiten versucht, die Vergleiche zu machen, aber nichts scheint zu funktionieren. (Es funktionierte für mich, wenn ich Ganzzahlen vergleiche, aber in diesem Fall ist ein String) Ich schätze Ihre Antworten.

Antwort

0

Sie möchten beim Vergleichen von Objekten .equals verwenden. == wird nicht wahr für String s zurückgegeben, auch wenn sie die gleichen Informationen enthalten, wie == vergleicht per Referenz, während .equals vergleicht nach Wert.

So ändern Sie es zu if (toTest.equals(search)).

0

UnitID und Record sind die Attribute von item Knoten. make ist ein untergeordneter Knoten zu item Knoten. Daher müssen Sie den Textinhalt auf dem Knoten "make" abrufen, um dessen Wert abzurufen. Versuchen Sie den folgenden Code:

File fXmlFile=new File("feed.xml"); 
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder(); 
Document doc=dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 
NodeList nList=doc.getElementsByTagName("item"); 

for (int temp=0; temp < nList.getLength(); temp++) 
    { 
     Node nNode=nList.item(temp); 
     if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
      NodeList children = nNode.getChildNodes(); 
      for(int i = 0; i < children.getLength(); i++) { 
       Node childNode = children.item(i); 
       if (childNode.getNodeName() == "make"){ 
        String make = childNode.getTextContent(); 
        if ("Nvidia".equals(make)) { 
         System.out.print(childNode.getTextContent()); // This will print Nvidia 
        } 
       } 
      } 
     } 
    } 
Verwandte Themen