【发布时间】:2010-12-17 03:41:27
【问题描述】:
我在这里创建了一个简单的 xml 文件:
http://roberthan.host56.com/productsNew.xml
这很简单,根节点是[products],而所有其他元素节点都是[product]。在每个【产品】节点下,有【代码】和【名称】两个子节点,所以基本上是这样的:
[product]
[code]ddd[/code]
[name]ssss[/name]
[/product]
我还编写了以下 Java 代码来解析这个 XML 文件并取出 [product] 节点的文本内容,并将其添加到 JComboBox。
docBuilder = docFactory.newDocumentBuilder();
doc = docBuilder.parse("http://roberthan.host56.com/productsNew.xml");
NodeList productNodes = doc.getElementsByTagName("product");
productlist.clear();
for (i = 0; i < productNodes.getLength(); i++)
{
Node childNode = productNodes.item(i);
if (childNode.hasChildNodes()) {
NodeList nl = childNode.getChildNodes();
Node nameNode = nl.item(2);
productlist.add(nameNode.getTextContent());
}
}
final JComboBox productComboB = new JComboBox();
Iterator iterator = productlist.iterator();
while(iterator.hasNext())
{
productComboB.addItem(iterator.next().toString());
}
代码比较简单,我先解析xml得到所有的product节点,放到一个nodelist中,productList就是一个arrayList。我遍历所有 [product] 节点,对于每个节点,如果它有子节点,那么我取第二个子节点(即 [name] 节点)并将其文本内容放入数组列表中,最后,我循环遍历 arrayList 并将每个项目添加到组合框中。
我遇到的问题是,如果我选择[code]子节点,意思是“Node nameNode = nl.item(1)”,它会完美运行;但是,如果我将 item(1) 更改为 item(2) 以提取所有 [name] 节点,组合框将有一个下拉列表,但所有项目都是空白的,就像我插入了 10 个空字符串一样。
另外,如果我尝试在上述代码之后的组合框中添加一个“Hello World”字符串,则“Hello World”项将出现在 10 个空项之后。
我花了一个下午的时间调试这个,但仍然没有突破,XML实际上很简单,Java也很简单。有人可以和我分享一些想法吗?非常感谢!
【问题讨论】:
-
最好的办法是进行一些调试以尝试隔离代码中导致错误的区域,然后如果没有解决方案,请发布一个小型可编译可运行程序来演示该问题。
-
另外,您是否考虑过使用 XPath 从您的文档中提取数据?
-
@Hovercraft 我有,但是这个功能必须在 Java 中完成,你能建议我将 XPath 合并到 Java 类的方法吗?
-
??? XPath 是在核心 Java 中实现的
-
我不知道你怎么能用这样随机缩进的代码晚上睡觉