XML_DOM_DON'T_PARSE_CREATE_ERROR_java.lang.NullPointerException

问题描述 投票:0回答:1

当我尝试解析XML并且XML不完整时,出现“ java.lang.NullPointerException”。

这里是代码

import java.io.File;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Read {


public static void main(String[] args) {

        String tableName = "myTable";
        String query = ("select * FROM " + tableName);
  try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");


    java.sql.Connection conn =  DriverManager
            .getConnection("jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=myUser;password=myPassword");

    Statement state = conn.createStatement();
    ResultSet result = state.executeQuery(query);
    ResultSetMetaData resultMeta = result.getMetaData();

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();   


    int cpt=1;
    String [][]d ;
    d = new String [1000][1000];
    d[0][0]= new String("test");
    d[0][1]=new String ("test");
    while(result.next()){         
      for(int i = 1; i <= resultMeta.getColumnCount(); i++)
        {
          if( result.getString(i)== null)
          { d[cpt][i]= new String(" ");}
          else
                {   String  res =result.getString(i);
                    d[cpt][i]= new String (res);
                }
      }

      cpt=cpt+1;
    } 

        //Element Table Name
    Document doc = docBuilder.newDocument();

    Element p_tableName = doc.createElement(tableName);
    doc.appendChild(p_tableName);


for(int j=1;j<= 15;j++)

        {

        Element p_object = doc.createElement("Object");
        p_tableName.appendChild(p_object);

            for(int i=1;i <= resultMeta.getColumnCount() ;i++)
            {

                Element nomChamps = doc.createElement(resultMeta.getColumnName(i));
                nomChamps.appendChild(doc.createTextNode(d[j][i]));
                p_object.appendChild(nomChamps);
            }
        }   



        Transformer tf = TransformerFactory.newInstance().newTransformer();
        //Format  XML 
        tf.setOutputProperty(OutputKeys.INDENT, "yes");
        tf.setOutputProperty(OutputKeys.METHOD, "xml");
        tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

        DOMSource source = new DOMSource(doc);
        StreamResult res = new StreamResult(new File("D:\\test/file2.xml"));
            **//I've got a problem whit this next line;** 
        **tf.transform(source, res);**



    System.out.println("ACTION COMPLETE !!");
    result.close();
    state.close();

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

  }      

  }
}

使用“ tf.transform(source,res)”创建了xml,但未完成,但出现了错误,但是如果删除此行,则出错,并且未创建XML。

帮助的心声

java xml parsing dom
1个回答
0
投票

您可以使用错误侦听器来管理它,类似这样:

tf.setErrorListener(new ErrorListener() {
            @Override
            public void warning(TransformerException exception) throws TransformerException {
                exception.printStackTrace();
            }

            @Override
            public void error(TransformerException exception) throws TransformerException {
                exception.printStackTrace();
            }

            @Override
            public void fatalError(TransformerException exception) throws TransformerException {
                exception.printStackTrace();
            }
        } );
© www.soinside.com 2019 - 2024. All rights reserved.