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>

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