私はここで簡単なXMLファイルを作成しました[製品]です。各[製品]ノードの下に、2つのつの子ノード、[コード]と[名前]がありますが、それは基本的に次のようになります。Javaの
[product]
[code]ddd[/code]
[name]ssss[/name]
[/product]
また、私は、このXMLファイルを解析するために、次のJavaコードを書いていると、 [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を解析し、すべての製品のノードを取得し、ノードリストに入れて、非常に簡単です、そしてproductListはArrayListのです。すべての[product]ノードをループします。子ノードがある場合は、2番目の子ノード([name]ノード)を取り出し、そのテキストコンテンツを配列リストに入れます。最後に、arrayListをループし、各項目をコンボボックスに追加します。
問題は、「node nameNode = nl.item(1)」を意味する[code]子ノードを選択すると完全に機能します。ただし、すべての[name]ノードを抽出するためにアイテム(1)をアイテム(2)に変更すると、コンボボックスにドロップダウンリストが表示されますが、10個の空の文字列を挿入したように、
また、上記のコードの後にコンボボックスに「Hello World」という文字列を追加しようとすると、10個の空の項目の後ろに「Hello World」という項目が表示されます。
私は午後全体をこのようにデバッグするのに多くの時間を費やしましたが、まだ画期的なことはありませんでしたが、XMLは実際には非常に簡単でJavaも簡単です。誰も私にこのような考えを伝えてください。どうもありがとう!
あなたの最善の策は、原因あなたのコード内の領域を分離しようとするいくつかのデバッグを行うことですエラーが発生した場合、解決策が脱落しない場合は、問題を示す小さなコンパイル可能な実行可能プログラムを投稿します。 –
また、XPathを使用してドキュメントから抽出することを検討しましたか? –
@Hovercraft私は持っていますが、この関数はJavaで実行する必要があります。私はJavaクラスにXPathを組み込む方法を提案できますか? – Kevin