我想将 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>
当我运行我的程序时,表是空的。
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");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句