2013-07-26 3 views
0

Моим требованием является обработка XML-файла для поиска символа и его замены. Я использую следующий код для этого:Ошибка при обработке xml-файла

public static void main(String[] args) { 
     try 
     { 
      StringBuilder sb = new StringBuilder(); 
     File xmlFile = new File("C:/Users/demo.xml"); 
     BufferedReader br = new BufferedReader(new FileReader(xmlFile)); 
      String line = null; 
      while((line = br.readLine())!= null){ 
      if(line.indexOf("&") != -1) 
      { 
       line = line.replaceAll("&","&"); 
      } 
       sb.append(line); 
      } 
       br.close(); 

       BufferedWriter bw = new BufferedWriter(new FileWriter(xmlFile)); 

       Source xmlInput = new StreamSource(new StringReader(sb.toString())); 
       StringWriter stringWriter = new StringWriter(); 
       StreamResult xmlOutput = new StreamResult(stringWriter); 
       TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
       transformerFactory.setAttribute("indent-number", 2); 
       Transformer transformer = transformerFactory.newTransformer(); 
       transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
       transformer.transform(xmlInput, xmlOutput); 


       bw.write(xmlOutput.getWriter().toString()); 
       bw.close(); 
       System.out.println("success"); 

      } 

     catch (Exception e) { 
      System.out.println("Error : " + e.getMessage()); 
     } 

Когда мой файл XML является:

<INFO> 
<NAME>Joseph</NAME> 
<BUSINESSNAME>M & A</BUSINESSNAME> 
<INFO> 

он дает надлежащий выход , но в следующем формате (фактическая XML)

<!DOCTYPE CASE SYSTEM "C:\Program Files\abc.dtd"> 
<INFO> 
<NAME>Joseph</NAME> 
<BUSINESSNAME>M & A</BUSINESSNAME> 
<INFO> 

Я получаю ошибку: Ошибка: java.io.FileNotFoundException: C: \ Program Files \ abc.dtd (система не может найти указанный путь).

Любое решение?

+0

Добавить файл в корзину или изменить его соответствующим образом? – Lenymm

+0

Получил это, путь doctype и путь к исходному файлу должны быть одинаковыми ... Спасибо – Aquarius24

ответ

0

Я создал этот класс для чтения строк из xml-файла, сохраненного во внутреннем запоминающем устройстве, он возвращает список, если вы хотите, чтобы вся расширенная строка вам нужна только для конкатенации, чтобы связать вместе, если не найден файл, возвращающий пустой список - это все, что вам нужно для чтения XML-файлов и синтаксического анализа строк, вы можете играть со списком, чтобы заменить буквы в строках, я надеюсь помочь!

public class readXMLFile { 
private String filePath = "FileStorage"; 
private String fileName = "File.xml"; 
private final String tag = "Internal Read Persistence"; 
File internalFileData; 

public readXMLFile() {// default constructor 
} 

public File getXMLFile(Context context){ 
File directory = null; 
ContextWrapper cw = new ContextWrapper(context); 
directory = cw.getDir(filePath, Context.MODE_PRIVATE); 
internalFileData = new File(directory, fileName); 
if(internalFileData.exists()){ 
Log.i("ReadXMLFile","File returned"); 
return internalFileData; 
} 
else{ 
Log.i(tag,"the file doesn't exists!"); 
return null; 
} 
} 

public List<String> readFile(Context context) { 
List<String> l = new LinkedList<String>(); 
try { 
File directory = null; 
ContextWrapper cw = new ContextWrapper(context); 
directory = cw.getDir(filePath, Context.MODE_PRIVATE); 
internalFileData = new File(directory, fileName); 

if (internalFileData.exists()) { 
Log.i("Internal Data", "the root exists!!"); 
try { 
FileInputStream fis = new FileInputStream(internalFileData); 
DataInputStream in = new DataInputStream(fis); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
String line; 
while ((line = br.readLine()) != null) { 
l.add(line); 
} 
try { 
if (in != null) { 
in.close(); 
} 
} catch (Exception e) { 
Log.i(tag, "Exception closing persistence connection"); 
      } 
} catch (Exception e) { 
Log.wtf("Fatal Exception", "Exception: " + e.getMessage()); 
} 
} else { 
Log.i(tag, "File doesn't exists"); 
return l;//return empty list 
} 
} catch (Exception e) { 
Log.wtf(tag, "Exception DATA READING: " + e.getMessage()); 
return l; 
} 
Log.i(tag, "file found return"); 
return l; 
} 

} 
Смежные вопросы