0

Javaでxmlファイルを解析する子ノードを取得する方法がわかりません。たとえば、次のコードがあります。

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Parser {

    public static void main(String args[]) {

        try{
            File stocks = new File("Stocks.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(stocks);
            doc.getDocumentElement().normalize();



            NodeList nodes = doc.getElementsByTagName("stock");
            Node nodez = nodes.item(1);
            String s = nodez.getFirstChild().getNodeName(); //outputs #text?
                        System.out.println(s);
                        //If I try this
                        String s = nodez.getNodeName(); //outputs 'stock'


        } catch (Exception e) {
            e.printStackTrace();
        }
    }



}

そのため、現在のノード名を出力しようとすると正しく出力されますが、次の子ノード名を出力しようとすると #text だけが出力されます。必要なノードを適切に出力するにはどうすればよいですか? getFirstChildメソッドをorとして使えばいいと思っgetNextSiblingたのですが、何か間違っているようですか?

このリンクを使用して xml ファイルを見つけることができます。

http://javarevisited.blogspot.com/2011/12/parse-xml-file-in-java-example-tutorial.html

4

2 に答える 2

3

要素 "stock" にはテキストが含まれており、最初の子として返されます。次のように使用できます。

        System.out.println(((Element) nodez).getElementsByTagName("symbol").item(0).getNodeName());
        // get all nodes
        NodeList nl=((Element) nodez).getElementsByTagName("*");
        for (int i = 0; i < nl.getLength(); i++) {
            System.out.println(nl.item(i).getNodeName());
        }
于 2013-11-08T16:10:16.193 に答える
0

実際のノードのノード タイプを確認する必要があります。

#textもノードです!しかし、あなたはおそらくタイプを探していますElement

Document#getElementsByTagNameを使用してドキュメントからノード リストを取得し、それを反復処理します。各ノードのタイプを確認して、関心のあるものを特定します。

于 2013-11-08T16:07:24.750 に答える