2012-03-31 30 views
3

Wie kann ich Attributwert aus dem Element extrahieren. Mein XML-Knoten ist wie folgt geschrieben < nodename attribute = "Wert"> Ich muss es extrahieren, um es mit einer anderen Zeichenfolge zu vergleichen.Java DOM XML Parsing :: Element Wert erhalten Wert

Da ich aber document.getElementsByTag nicht anrufe, kann ich .getAttribute ("att."). GetNodeValue nicht verwenden, um den Wert zu erhalten.

Stattdessen habe ich eine NodeList und getAttribute() hat nicht getNodeValue.

package dev; 

import java.io.*; 
import java.util.*; 

import javax.xml.parsers.*; 
import javax.xml.xpath.*; 
import org.w3c.dom.*; 
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 



public class Parser { 


    static String def = "\"admin\",\"base\",\"Default\",\"simple\""; 

    static String category = ""; 
    static String sku = ""; 
    static String has_options = "0"; 

    static String name = ""; 
    static String image = ""; 
    static String small_image = ""; 
    static String thumbnail = ""; 

    public static void toCSV() { 
     try { 
      BufferedWriter output = new BufferedWriter(new FileWriter("sim.csv", true)); 
      output.newLine(); 
      output.write(def); 
      output.write(String.format(",\"%s\",\"%s\",\"%s\"", category, sku, has_options)); 
      output.write(String.format(",\"%s\",\"%s\",\"%s\",\"%s\"", name, image, small_image, thumbnail)); 
      output.flush(); 
      output.close(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     toCSV(); 
     try { 
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      DocumentBuilder builder = factory.newDocumentBuilder(); 

      Document document = builder.parse(new File("input.asp.xml")); 
      document.getDocumentElement().normalize(); 

      NodeList list = document.getElementsByTagName("izdelek"); 
      for(int i = 0; i < 1; i++) { 
       NodeList child = list.item(i).getChildNodes(); 
       for(int j = 0; j < child.getLength(); j++) { 
        if(child.item(j).getNodeName().equals("kategorija")) { 
         category = child.item(j).getTextContent().trim(); 
        } else if(child.item(j).getNodeName().equals("ean")) { 
         sku = child.item(j).getTextContent().trim(); 
        } else if(child.item(j).getNodeName().equals("izdelekIme")) { 
         name = child.item(j).getTextContent().trim(); 
        } else if(child.item(j).getNodeName().equals("slikaMala")) { 
         small_image = child.item(j).getTextContent().trim(); 
         thumbnail = child.item(j).getTextContent().trim(); 
        } else if(child.item(j).getNodeName().equals("slikaVelika")) { 
         image = child.item(j).getTextContent().trim(); 
        } else if(child.item(j).getNodeName().equals("dodatneLastnosti")) { 
         NodeList subs = child.item(j).getChildNodes(); 
         //^need to parse these nodes they are written as <nodename attribute="value"> 
         // i need to print out the value 
        } 
       } 
       //toCSV(); 
      } 

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


} 

Antwort

5

Gelöst:

XML-Eingabe:

< nodename attribute="value" > Something </ nodename> 

Java-Code:

NodesList subs = child.item(j).getChildNodes(); 

System.out.println(subs.item(0).getTextContent()); // >> Something 

Element element = (Element) document.adoptNode(subs.item(0)); 
System.out.println(element.getAttribute("attribute")); // >> value 
+2

Ich schlage vor, dass Sie in XPath schauen. – kdgregory

0

Sie können auch diese,

child.item(j).getFirstChild().getNodeValue();