【问题标题】:Directly show XML record to jtable record直接将 XML 记录显示到 jtable 记录
【发布时间】:2009-10-13 12:00:29
【问题描述】:

我是一名 c++ 程序员,但对 java 世界很陌生。我必须将 xml 数据直接显示到 jtable 中。

说,

xml格式如下

<Name> Tom </Name>
<DateofBirth> 12/3/1985 </DateofBirth>
<country> US </country>

那么表格需要如下显示

Name    |     DateofBirth | Country

Tom      12/3/1985       Us

可行吗?有的话可以给个样品吗?

【问题讨论】:

    标签: java xml swing


    【解决方案1】:

    是的,这是非常可行的。此过程有 2 个步骤。首先是解析xml。一些用于解析 xml 的示例 Java 代码将是(此示例显示从 xml 文件中获取“人”节点,但它可以很容易地适应您的 xml 文件):

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    Document document = parser.parse("xml/sample.xml");
    NodeList personNodes = document.getElementsByTagName("person");
    List<String> names = new LinkedList<String>();
    for (int i = 0; i < personNodes.getLength(); i++) {
      String firstName = null;
      String lastName = null;
      Node personNode = personNodes.item(i);
      NodeList children = personNode.getChildNodes();
      for (int j = 0; j < children.getLength(); j++) {
      Node child = children.item(j);
      String nodeName = child.getNodeName();
      String nodeValue = child.getTextContent();
      if ("firstName".equals(nodeName)) {
        firstName = nodeValue;
      } else if ("lastName".equals(nodeName)) {
       lastName = nodeValue;
      } 
    }
    names.add(firstName + " " + lastName);
    } 
    

    提取所需数据后,创建一个使用该数据的新 JTable。用于您的目的的最简单的 JTable 构造函数是:

    JTable(Object[][] rowData, Object[] columnNames) 
    

    有更高级和更好的方法可以做到这一点(例如使用数据绑定框架),但这绝对是一个很好的起点。

    【讨论】:

    【解决方案2】:

    当然可以。

    我会查看JDOM 库,它为 XML 提供了一个简单的 API。它比标准更容易使用,但有点笨拙DOM/SAX 库。

    如果您有上述 XML 的架构,JAXB 可能会很有趣,尽管它相当重量级。

    但是,我不能可靠地建议 Swing/JTable 方面。我敢肯定有很多人可以照顾这方面的事情。

    【讨论】:

      【解决方案3】:

      TableModel 是一个接口。如果您真的想直接从 XML 文档填充您的表格,请编写 TableModel 接口的自定义实现,该接口从您的内存中 DOM 对象获取/设置值。

      这样做的一个好处是您可以支持编辑表格,并将编辑直接应用于您的 XML 元素。

      请注意,这些 TableModel 方法被非常频繁地调用,因此应该非常快。如果您正在处理大型 XML 文档,则访问单个单元格的随机访问速度可能不够快。

      【讨论】:

        猜你喜欢
        • 2019-06-08
        • 2014-02-13
        • 2012-08-28
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-20
        相关资源
        最近更新 更多