2012-03-31 11 views
3

要素から属性値を抽出するにはどうすればよいですか。私のXMLノードはこのように書かれています < nodename属性= "値">別の文字列と比較するためには、それを抽出する必要があります。Java DOM XML解析::要素属性値の取得

私はdocument.getElementsByTagを呼び出していないので、値を取得するために.getAttribute( "att。")。getNodeValueを使用できません。

代わりにNodeListがあり、getAttribute()に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(); 
     } 
    } 


} 

答えて

5

は解決:

XML入力:

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

のJavaコード:

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

私はXPathを調べることをお勧めします。 – kdgregory

0

ます。また、これを使用することができ、

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

関連する問題