3

こんにちは、私は Java で XML ファイルを持っています。

<tableNumbers>
     <row id="0">
         <column id="0"> 4 </column>
         <column id="1"> 2 </column>
         <column id="2"> 5 </column>
         <column id="3"> 6 </column>
    </row>
    <row id="1">
         <column id="0"> 5 </column>
         <column id="1"> 10 </column>
         <column id="2"> 7 </column>
         <column id="3"> 9 </column>
    </row>
</tableNumbers>

現在、テーブルのすべての行には同じ数の列があり、私がやろうとしているのは、xml を循環し、XML ファイルの数を Integer 配列に格納することです。(たとえば、行 0 列 0 は数値 [0][0] に格納されます。

私が現在持っているコードは次のとおりです。

public static Integer[][] getNumbers(File file, int noRows, int noColums){
        Integer[][] numbersArray = new Integer[noRows][noColumns];

        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        try {
            Document document = docBuilderFactory.newDocumentBuilder().parse(file);
            Element rootElement = document.getDocumentElement(); 

            NodeList rowList = rootElement.getElementsByTagName("row");
            if ((rowList != null)) 
                for (int i = 0; i < rowList.getLength(); i++) {
                    NodeList columnsList = rowList.item(i).getChildNodes();
                    if ((columnsList != null)) 
                        for (int j = 0; j < columnsList.getLength(); j++) {
                            Element number = (Element) columnsList.item(j); 
                            System.out.println("(" +i + "," + j + ") " + number.getNodeValue());
                            numbersArray[i][j] = number.getNodeValue();
                        }
                }

            return numbersArray;
        }
        catch (Exception c){}
        return null;
}

標準出力からの数行は次のとおりです。

(0,0) null
(0,1) null
(0,2) null
(0,3) null
(1,0) null
(1,1) null
(1,2) null
(1,3) null

すべてのセルから返される値は ですnull。エラーがxmlファイルから読み取っていることはわかっています。誰かが私が間違っている場所を教えてくれたら、私は最も感謝しています

4

5 に答える 5

3

以下を追加します。

Element number = (Element) columnsList.item(j);
if ("column".equals(number.getTagName())) }
    System.out.println("(" +i + "," + j + ") " + number.getTextContent());
}

空の要素がある可能性があるためです。また、宣言getTextContent()からメソッドを使用しています。Node

于 2012-04-26T09:18:38.103 に答える
0

getNodeValueはノードの値を返します-列ノードには値がありません(おそらくスペースを除く)。ただし、テキスト要素が含まれている必要があり、必要な値が含まれます

于 2012-04-26T09:10:04.067 に答える
0

System.out.println("(" +i + "," + j + ") " + number.item(0).getNodeValue());代わりに試してくださいSystem.out.println("(" +i + "," + j + ") " + number.getNodeValue());

また

NodeList valList = number.getChildNodes();
System.out.println("Last Name : " + ((Node) valList.item(0)).getNodeValue());

うまくいくことを願って、

于 2012-04-26T09:05:36.597 に答える
0

私はそれを機能させるためにいくつかの変更を加えました。これがスニペットです。

                    for (int j = 0; j < columnsList.getLength(); j++) {
                        if ("column".equals(columnsList.item(j)
                                .getNodeName())) {
                            Element number = (Element) columnsList.item(j);
                            System.out.println("(" + i + "," + j + ") "
                                    + columnsList.item(j).getTextContent());
                            numbersArray[i][j] = Integer
                                    .parseInt(columnsList.item(j)
                                            .getTextContent().trim());
                        }
                    }
于 2012-04-26T09:37:25.043 に答える
0

その XML の例は正確なコピーですか? その場合は、「行」の終了タグにエラーがあります。あるはずです</row>(つまり、スラッシュがありません)。

于 2012-04-26T08:58:39.330 に答える