XML do jtable

Dyskusje na temat Javy.
mrblue
Nowicjusz
Posty: 2
Dołączył(a): piątek, 2 września 2016, 13:18

XML do jtable

Post przez mrblue »

Witam!
Problem, który nie daje mi spać po nocach wygląda następująco:
Próbuje napisać program, który umożliwi wstawienie zawartości pliku xml do jtable. Budowa pliku xml zapisanego jako sp2.xml przedstawia się następująco:

Code: Zaznacz cały

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="general_multi_row.xslt"?>
<ReceivedPackets>
  <From>
  </From>
  <To>
  </To>
  <DeviceNameLabel>Urządzenie:</DeviceNameLabel>
  <DeviceName>Nano</DeviceName>
  <CurrentDateLabel>Data sporządzenia raportu:</CurrentDateLabel>
  <CurrentDate>2016-09-01</CurrentDate>
  <ProgramNameLabel>Program:</ProgramNameLabel>
  <ProgramName>NSerwis - kasy</ProgramName>
  <DescriptionLabel>Opis</DescriptionLabel>
  <ValueLabel>Wartość</ValueLabel>
  <ProgramVersionLabel> wersja:</ProgramVersionLabel>
  <ProgramVersion>1.0.1.144</ProgramVersion>
  <ReportTitle>Sprzedaż artykułów</ReportTitle>
  <NoDataLabel>Brak danych</NoDataLabel>
  <packetCount>6</packetCount>
  <Packet>
    <packetID>U</packetID>
    <packetType>R</packetType>
    <Description>Raport sprzedaży PLU </Description>
    <packetNum>1</packetNum>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>5                 </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value>   CHLEB MIESZ.O,5</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>10,50</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>5,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,10</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>6                 </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value> CHLEB MIESZ.0,5KR</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>345,40</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>157,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,20</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>12                </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value> CHLEB FORMA 0.9KR</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>32,00</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>8,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>4,00</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>13                </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value>   CHLEB FORMA 0,6</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>5,40</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>2,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,70</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>14                </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value> CHLEB FORMA 0,6KR</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>39,20</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>14,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,80</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>16                </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value>  CHLEB RAZ. 0,5KR</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>20,00</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>8,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,50</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>18                </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value> CHLEB PSZEN.0,5KR</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>7,20</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>3,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,40</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
  <packetCount>6</packetCount>
  <Packet>
    <packetFields>
      <field>
        <label>EAN</label>
        <value>19                </value>
        <description>Kod towaru</description>
      </field>
      <field>
        <label>Name</label>
        <value>  CHLEB ZIARN.0,45</value>
        <description>Nazwa towaru</description>
      </field>
      <field>
        <label>Sales</label>
        <value>11,20</value>
        <description>Sprzedaż</description>
      </field>
      <field>
        <label>TotalQuantity</label>
        <value>4,000</value>
        <description>Sprzedana ilość</description>
      </field>
      <field>
        <label>AveragePrice</label>
        <value>2,80</value>
        <description>Średnia cena</description>
      </field>
      <field>
        <label>_reserved</label>
        <value>0,00</value>
        <description>Procentowy udział w sprzedaży</description>
      </field>
    </packetFields>
  </Packet>
</ReceivedPackets>
Udało mi się częściowo wyciągnąć dane z xml' a lecz niestety nie z efektem jaki oczekiwałem. :evil: .

Code: Zaznacz cały

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package testy;

import javax.swing.*;
import javax.swing.table.TableModel;
import javax.swing.table.DefaultTableModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
 
import java.awt.*;
import java.io.File;
import java.awt.event.*;
 
public class DefaultXMLTableModel extends JFrame {
    public static void main(String[] args) {
        new DefaultXMLTableModel();
    }
     
    public File xml = null;
    public Document dom = null; 
    public JScrollPane jScrollPane1;
    public DefaultTableModel model;
    public JTable jTable1;
     
    public DefaultXMLTableModel() {
        setTitle("DefaultXMLTableModel");
        setSize(600,135);
        xml = new File(System.getProperty("user.dir") + File.separator + "sp2.xml");        
        installGUI();       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
        setVisible(true);       
    }
     
    public void installGUI() {
        Container ctr = getContentPane();
        ctr.setLayout(new BorderLayout());
         
        model = new DefaultTableModel() {
            public boolean isCellEditable(int row, int column) { return false; }
        };
         
      
        jTable1 = new JTable(model);
        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1 = new JScrollPane(jTable1);            
        ctr.add(BorderLayout.CENTER,jScrollPane1);
         System.out.println("User Home Path: "+System.getProperty("user.dir"));
        
        model.addColumn("Kod towaru");
        model.addColumn("Nazwa towaru");
        model.addColumn("Sprzedaż");
        model.addColumn("ilość");
        model.addColumn("cena");
        model.addColumn("udział");         
          
        if (xml.exists() && xml.length() != 0) {
            dom = parseFile(xml);
            insertTableRows(model,dom);
        }
    }
     
    
    public Document parseFile(File file) {
        try {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();     
        dom = (Document) builder.parse(file);
        } catch (Exception e) { e.printStackTrace(); }  
        return dom;
    }
     
    public void insertTableRows(DefaultTableModel tableModel,Document doc) {            
        Element root = doc.getDocumentElement();
        NodeList list = root.getElementsByTagName("field");
        for (int i = 0; i < list.getLength(); ++i) {
            Element e = (Element) list.item(i);
            if (e.getNodeType() == Element.ELEMENT_NODE) {
                Object[] row = { getArticleInfo("value",e),getArticleInfo("value",e),getArticleInfo("value",e),getArticleInfo("value",e),getArticleInfo("value",e),getArticleInfo("value",e)};
                tableModel.addRow(row);
                
            }
        }       
         
        tableModel.fireTableStructureChanged(); 
        tableModel.fireTableDataChanged();
    }
     
    public Object getArticleInfo(String tagName, Element elem) {    
        NodeList list = elem.getElementsByTagName(tagName);
        for (int i = 0; i < list.getLength(); ++i) {
            Node node = (Node) list.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Node child = (Node) node.getFirstChild();
                return child.getTextContent().trim();
            }
             
            return null;
        }
     
        return null;
    }
}  
Metoda zamiast wczytywać dane do wiersza robi to w kolumnie. Winowajcą są atrybuty o tej samej nazwie value. Czy istnieje możliwość przypisania wartości value do układu kolumn jaki stworzyłem?
mrblue
Nowicjusz
Posty: 2
Dołączył(a): piątek, 2 września 2016, 13:18

Re: XML do jtable

Post przez mrblue »

Myślę, że początkowo mało profesjonalnie ale rozwiązałem problem.

Code: Zaznacz cały

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


import javax.swing.*;
import javax.swing.table.TableModel;
import javax.swing.table.DefaultTableModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
 
import java.awt.*;
import java.io.File;
import java.awt.event.*;
 
public class DefaultXMLTableModel extends JFrame {
    public static void main(String[] args) {
        new DefaultXMLTableModel();
    }
     
    public File xml = null;
    public Document dom = null; 
    public JScrollPane jScrollPane1;
    public DefaultTableModel model;
    public JTable jTable1;
     
    public DefaultXMLTableModel() {
        setTitle("DefaultXMLTableModel");
        setSize(600,135);
        xml = new File(System.getProperty("user.dir") + File.separator + "sp.xml");        
        installGUI();       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
        setVisible(true);       
    }
     
    public void installGUI() {
        Container ctr = getContentPane();
        ctr.setLayout(new BorderLayout());
         
        model = new DefaultTableModel() {
            public boolean isCellEditable(int row, int column) { return false; }
        };
         
      
        jTable1 = new JTable(model);
        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1 = new JScrollPane(jTable1);            
        ctr.add(BorderLayout.CENTER,jScrollPane1);
         System.out.println("User Home Path: "+System.getProperty("user.dir"));
        
        model.addColumn("Kod towaru");
        model.addColumn("Nazwa towaru");
        model.addColumn("Sprzedaż");
        model.addColumn("ilość");
        model.addColumn("cena");
                
          
        if (xml.exists() && xml.length() != 0) {
            dom = parseFile(xml);
            insertTableRows(model,dom);
        }
    }
     
    
    public Document parseFile(File file) {
        try {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();     
        dom = (Document) builder.parse(file);
        } catch (Exception e) { e.printStackTrace(); }  
        return dom;
    }
     
    public void insertTableRows(DefaultTableModel tableModel,Document doc) {            
        Element root = doc.getDocumentElement();
        NodeList list = root.getElementsByTagName("packetFields");
        for (int i = 0; i < list.getLength(); ++i) {
            Element e = (Element) list.item(i);
          
            if (e.getNodeType() == Element.ELEMENT_NODE) {
                Object[] row = { getArticleInfo("value",e), getArticleInfo2("value",e),getArticleInfo3("value",e),getArticleInfo4("value",e),getArticleInfo5("value",e)};
                tableModel.addRow(row);
            }
            
        }       
         
        tableModel.fireTableStructureChanged(); 
        tableModel.fireTableDataChanged();
    }
     
    public Object getArticleInfo(String tagName, Element elem) {    
        NodeList list = elem.getElementsByTagName(tagName);
        for (int i = 0; i < list.getLength(); ++i) {
            Node node = (Node) list.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Node child = (Node) node.getFirstChild();
                return child.getTextContent().trim();
                
            }
             
            return null;
        }
     
        return null;
    }
     public Object getArticleInfo2(String tagName, Element elem) {    
        NodeList list = elem.getElementsByTagName(tagName);
        for (int i = 1; i < list.getLength(); ++i) {
            Node node = (Node) list.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Node child = (Node) node.getFirstChild();
                return child.getTextContent().trim();
                
            }
             
            return null;
        }
     
        return null;
    }
        public Object getArticleInfo3(String tagName, Element elem) {    
        NodeList list = elem.getElementsByTagName(tagName);
        for (int i = 2; i < list.getLength(); ++i) {
            Node node = (Node) list.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Node child = (Node) node.getFirstChild();
                return child.getTextContent().trim();
                
            }
             
            return null;
        }
     
        return null;
    }
           public Object getArticleInfo4(String tagName, Element elem) {    
        NodeList list = elem.getElementsByTagName(tagName);
        for (int i = 3; i < list.getLength(); ++i) {
            Node node = (Node) list.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Node child = (Node) node.getFirstChild();
                return child.getTextContent().trim();
                
            }
             
            return null;
        }
     
        return null;
    }
              public Object getArticleInfo5(String tagName, Element elem) {    
        NodeList list = elem.getElementsByTagName(tagName);
        for (int i = 4; i < list.getLength(); ++i) {
            Node node = (Node) list.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Node child = (Node) node.getFirstChild();
                return child.getTextContent().trim();
                
            }
             
            return null;
        }
     
        return null;
    }
      
} 
Post Reply