有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将xml dom解析为对象

如何用这样的对象填充数组

class Sam{
String id;
String type;
String data;
}

从xml结构:

<Table name="Sam">
      <Row id="374058">
         <Col name="ID.1">374058</Col>
         <Col name="TYPE.1">mob</Col>
      </Row>
      <Row id="374059">
         <Col name="ID.1">374059</Col>
         <Col name="TYPE.1">ff</Col>
      </Row>
   </Table>

找到了这样的“表”,但我下一步该怎么做才能从“行”中收集数据呢

List<Sam> samList = new new ArrayList<>();
NodeList nameNodeList = xml.getDocumentElement().getElementsByTagName("Table");
        if (nameNodeList != null) {
            for (int i = 0; i < nameNodeList.getLength(); i++) {
                Node node = nameNodeList.item(i);
                if (node.getAttributes().getNamedItem("name").getNodeValue().equals("Sam") &&
                        node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;

                   //what should i do next, how can i fined ID,TYPE,DATA?
                }
            }
        }

共 (2) 个答案

  1. # 1 楼答案

    试试这个。我尝试对问题进行编码,并得到以下输出。这段代码解析XML并构造Sam对象

    代码:

    import java.util.ArrayList;
    import java.util.List;
    
    import org.w3c.dom.NodeList;
    import org.w3c.dom.*;
    import javax.xml.parsers.*;
    import java.io.*;
    
    public class XmlParse {
    
        public static void main(String[] args) {
            XmlParse xmlParse = new XmlParse();
            xmlParse.xmlToObj();
    
        }
    
        public void xmlToObj() {
    
            try {
                
                File inputFile = new File("sam.xml");
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(inputFile);
                doc.getDocumentElement().normalize();
                System.out.println("Root element: " + doc.getDocumentElement().getNodeName());
                NodeList nodeList = doc.getElementsByTagName("Row");
                
                Node node = null;
                List<Sam> samList = new ArrayList<>();
                if(nodeList != null && nodeList.getLength() > 0) {
                    for(int i=0; i < nodeList.getLength(); i++) {
                        node = nodeList.item(i);
                        NodeList innerNodeList =  doc.getElementsByTagName("Col");
                        
                        Node innerNodeID = innerNodeList.item(0);
                        Node innerNodeType = innerNodeList.item(1);
                        
                        String id =  innerNodeID.getTextContent();
                        String type = innerNodeType.getTextContent();
                        Sam sam = new Sam(id, type, null);
                        System.out.println(sam.toString());
                        
                        samList.add(sam);
                    }
                    
                }
                
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
    }
    
    class Sam {
        String id;
        String type;
        String data;
        public Sam(String id, String type, String data) {
            this.id = id;
            this.type = type;
            this.data = data;
        }
        @Override
        public String toString() {
            return "Sam [id=" + id + ", type=" + type + ", data=" + data + "]";
        }
        
    }
    
    

    输出:

    Root element: Table
    Sam [id=374058, type=mob, data=null]
    Sam [id=374058, type=mob, data=null]
    

    输入:sam.xml

    <Table name="Sam">
        <Row id="374058">
           <Col name="ID">374058</Col>
           <Col name="TYPE">mob</Col>
        </Row>
        <Row id="374059">
           <Col name="ID">374059</Col>
           <Col name="TYPE">ff</Col>
        </Row>
    </Table>