当我尝试解析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。
帮助的心声
您可以使用错误侦听器来管理它,类似这样:
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();
}
} );