我想将XML导入jTable。 我创建表单,但表不是带有xml数据的字段,代码没有错误。
这是我的代码:
private void Tabela() {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
try{
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("testxml.xml");
Element root = doc.getDocumentElement();
NodeList nodelist1 = root.getChildNodes();
String[] st = new String[4];
for (int i = 0; i < nodelist1.getLength(); i++)
{
Node node = nodelist1.item(i);
if (node.getNodeType() == node.ENTITY_NODE) {
st[0] = node.getChildNodes().item(1).getTextContent();
st[1] = node.getChildNodes().item(3).getTextContent();
st[2] = node.getChildNodes().item(5).getTextContent();
st[3] = node.getChildNodes().item(7).getTextContent();
((DefaultTableModel) jTable1.getModel()).addRow(st);
}
}
}
catch(Exception ex)
{
System.out.print("error");
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
当我运行我的程序时,表格为空。
答案 0 :(得分:0)
a)您需要检查节点是否为ELEMENT_NODE
。使用Node.ELEMENT_NODE
,而不是实例。实体节点是表示DTD中的实体的节点。
b)您正在为st
中的所有元素分配单个字符串值。您需要先收集它们然后分配给您的阵列。最好的方法是在列表中收集它们。
c)始终在catch块中打印堆栈跟踪。否则你不会知道来自的例外是什么以及在哪里。
您的代码应如下所示:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("testxml.xml");
Element root = doc.getDocumentElement();
NodeList nodelist1 = root.getChildNodes();
String[] st = null;
List<String> texts = new ArrayList<String>();
for (int i = 0; i < nodelist1.getLength(); i++)
{
Node node = nodelist1.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE )
{
texts.add( node.getTextContent() );
}
}
st = texts.toArray( new String[]{} );
System.out.println( Arrays.toString( st ) );
DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
model.addRow( st );
}
catch(Exception ex)
{
ex.printStackTrace();
System.out.print("error");
}