【问题标题】:Java DOM XML parsing :: getting element attribute valueJava DOM XML解析::获取元素属性值
【发布时间】:2012-04-14 16:25:30
【问题描述】:

如何从元素中提取属性值。我的 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();
        } 
    }


}

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

    已解决:

    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
    

    【讨论】:

    • 我建议您查看 XPath。
    【解决方案2】:

    你也可以用这个,

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

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 2023-04-08
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多