2015-04-24 46 views
0

我想創建一個解析器,它可以將XML數據庫提取分析到FlatXMLDataSet中。FlatXmlDataSetBuilder在使用StringBuffer時拋出「java.net.MalformedURLException」

我正在使用StringBuffer來編寫我的FlatXML,然後將其轉換爲FlatXmlDataSet,但它拋出了一個「java.net.MalformedURLException:No protocol」。

所以我試圖從我的StringBuffer創建一個文件並將其解析爲一個FlatXMLDataSet。它的工作原理!但我真的需要使用StringBuffer,因爲一切都必須在內存中使用。

這裏是我的FlatXML樣本:

<?xml version='1.0' encoding='UTF-8'?> 
<dataset> 
    <TABLENAME COL1="1" 
    COL2="35" 
    /> 
</dataset> 

這裏是我使用的代碼示例:

// Write the buffer into a file. 
writeBuffer(buffer, "D:\\test.xml"); 
// Parse the file into a DataSet. 
IDataSet test = createDataSet("D:\\test.xml"); 

// Cast the StringBuffer into an InputSource and give it to 
// a FlatXMLDataSetBuider. 
InputSource xmlInputStream = new InputSource(buffer.toString()); 

FlatXmlDataSetBuilder flatXmlBuilder = new FlatXmlDataSetBuilder(); 
flatXmlBuilder.setColumnSensing(true); // We do not have a dtd to give. 
IDataSet dataSet = flatXmlBuilder.build(xmlInputStream); // Error is thrown here 

private static void writeBuffer(StringBuffer buffer, String path) 
{ 
    try 
    { 
     String content = buffer.toString(); 

     File file = new File(path); 

     // if file doesnt exists, then create it 
     if (!file.exists()) 
     { 
      file.createNewFile(); 
     } 

     FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(content); 
     bw.close(); 
    } 
    catch (Exception e) 
    { 

    } 
} 

private static IDataSet createDataSet(String filePath) 
{ 
    IDataSet dataSet = null; 
    try 
    { 
     InputStream is = new FileInputStream(filePath); 
     InputSource xmlInputStream = new InputSource(is); 

     FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); 
     builder.setColumnSensing(true); 
     dataSet = builder.build(xmlInputStream); 
    } 
    catch (Exception e) 
    { 

    } 
    return dataSet; 
} 

我在做什麼錯?我的意思是,爲什麼我的StringBuffer中的文件起作用,而不是我的StringBuffer本身?

回答

0

經過數小時的測試,我終於找到了發生了什麼事:我的StringBuffer沒有指定任何協議,也沒有指定我的InputSource,所以我的FlatXmlDataSetBuilder無法知道如何處理我的字符串。

所以,我改變我的InputSource decalaration和它的工作:

InputSource xmlInputStream = new InputSource(new ByteArrayInputStream(buffer.toString().getBytes("utf-8"))); 
0

問題是「D:\ test.xml」不是有效的URL,因爲如異常消息所示,它不指定協議。

正確的字符串是「file:D:\ test.xml」(其中「file:」是協議)。

+0

的文件的工作,這是從自身的StringBuffer的數據集不工作 – KDelli

相關問題