1

XMLファイルを読み取るためのこのコードがあります:

try {

            File fXmlFile = new File(fullFilePath);
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("task");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                    int i = temp;

                    MyTasks.customers[i][11] = getTagValue("att1", eElement);
                    MyTasks.customers[i][12] = getTagValue("att8", eElement);
                    MyTasks.customers[i][13] = getTagValue("att2", eElement);
                    MyTasks.customers[i][14] = getTagValue("att7", eElement);
                    MyTasks.customers[i][15] = getTagValue("att3", eElement);
                    MyTasks.customers[i][16] = getTagValue("att4", eElement);
                    MyTasks.customers[i][18] = getTagValue("att5", eElement);
                    MyTasks.customers[i][19] = getTagValue("att6", eElement);
                    //ect
                }
            }
        } catch (Exception e) {
            CreateLog.addToLog("[ReadXML]" + e.toString());

        }

エラーが発生した後、XML ファイルの読み取りを続行できますか。1 つの属性が存在しない場合、スクリプト全体が読み取りを停止し、エラーをキャッチします。

前もって感謝します

4

3 に答える 3

3

可能です。try-catch内部にステートメントを追加しfor-loop、例外をキャッチする場合はcontinue;ステートメントを使用します。

于 2012-11-14T08:29:51.103 に答える
1

このようなもの?

MyTasks.costumers[i][19] = callGetTagValue("x", eElement)


...

private callGetTagValue(String x, Object element){
try{
//foo
}catch(Exception e){
return "not found";
}
}

このようにして、利用可能なデータが失われることはありません。これは、continueを呼び出すだけの場合です。

編集:たとえば、次のようにすることもできます。

try{
     for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                    int i = temp;

                    MyTasks.customers[i][11] = getTagValue("att1", eElement);
                    MyTasks.customers[i][12] = getTagValue("att8", eElement);
                    MyTasks.customers[i][13] = getTagValue("att2", eElement);
                    MyTasks.customers[i][14] = getTagValue("att7", eElement);
                    MyTasks.customers[i][15] = getTagValue("att3", eElement);
                    MyTasks.customers[i][16] = getTagValue("att4", eElement);
                    MyTasks.customers[i][18] = getTagValue("att5", eElement);
                    MyTasks.customers[i][19] = getTagValue("att6", eElement);
                    //ect
                }}catch(Exception e){
continue;
}

しかし、例外が発生した場合

MyTasks.customers[i][13] = getTagValue("att2", eElement);

残りのデータは受信されません

于 2012-11-14T08:31:38.330 に答える
1

ループtry-catchの中に入れます。

         for (int temp = 0; temp < nList.getLength(); temp++) {
           try{
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                Element eElement = (Element) nNode;
                ...
            }
          }catch(Exception ex){...}
        }
于 2012-11-14T08:30:29.643 に答える