【问题标题】:Parse xml dom to an object将 xml dom 解析为对象
【发布时间】:2021-05-16 06:34:26
【问题描述】:

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

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?
                }
            }
        }

【问题讨论】:

    标签: java xml parsing dom


    【解决方案1】:

    你可以使用JAXB Unmarshalling

    你也可以在Examples JAXB Unmarshalling看到一些例子

    【讨论】:

    • 我想我不能在 ID.1 这样的名称中使用它?
    【解决方案2】:

    试试这个。我尝试对问题进行编码并获得以下输出。此代码解析您的 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>
    

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2015-01-16
      • 2014-07-30
      相关资源
      最近更新 更多