Java DOM XML解析::获取元素属性值

时间:2012-03-31 01:27:35

标签: java xml dom

如何从元素中提取属性值。我的xml节点是这样写的 < nodename attribute =“value”>我需要将其解压缩以将其与另一个字符串进行比较。

但是因为我没有调用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();
        } 
    }


}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你也可以使用它,

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