2014-12-12 3 views
2

Каков наилучший способ изменить версию xml-файла с 1.0 на 1.1? Мне нужно разобрать их с помощью dom, но я не могу этого сделать, не устанавливая xml-версию в 1.1, потому что некоторые файлы имеют некоторые недопустимые символы, которые не принимаются с использованием xml 1.0.Изменить версию xml с помощью java

Я не знаю, как эти файлы могут быть созданы, но в любом случае у меня есть некоторые.

Эти файлы довольно большие, поэтому мне не хотелось бы загружать весь файл только для изменения заголовка.

Могу ли я каким-либо образом изменить InputStream файла или заменить заголовок файла без загрузки всего содержимого?

ответ

3

Парсер DOM загружает все содержимое файла в память, но я думаю, вы можете комбинировать использование регулярных выражений и RandomAccessFile, чтобы получить желаемый эффект. Попробуйте следующий код:

String line, filepath = "/file.xml"; 
    long ptr; 

    try (RandomAccessFile file = new RandomAccessFile(filepath, "rw");) { 

     //captures the XML declaration 
     Pattern p = Pattern 
       .compile("<\\?xml([^<>]*)version=\"(1.[01])\"([^<>]*)>"); 

     //sets ptr to the beginning of a file 
     ptr = file.getFilePointer(); 


     while ((line = file.readLine()) != null) { 
      Matcher m = p.matcher(line); 

      //if the xml declaration has been found 
      if (m.find()) { 
       String newLine = line.replace("version=\"1.0\"", "version=\"1.1\"");   
       file.seek(ptr); 
       file.write(newLine.getBytes()); 
       break; 
      } 
      ptr = file.getFilePointer(); 
     } 

    } catch (IOException ex) { 

    } 


} 
+0

Спасибо. Это именно то, что я хотел сделать. – Jayni

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