2015-10-01 4 views
0

У меня есть метод, который анализирует конкретную строку и должен изменить эту строку, используя метод setText() JDOM. Но когда я смотрю на документ после окончания программы, струнный никогда не меняется:JDOM setText() Не работает

public void findVirtue(String word, Element a) throws JDOMException, 
     IOException, TransformerFactoryConfigurationError, 
     TransformerException { 
    SAXBuilder builder = new SAXBuilder(); 
    Document document = builder.build(xml); 
    Pattern p = Pattern.compile("(?i)\\bvirtue('?s)?\\b", 
      Pattern.CASE_INSENSITIVE); 
    Matcher m = p.matcher(word); 
    List<String> virtue = new ArrayList<String>(); 
    // Need to Increment a counter 

    while (m.find()) { 
     virtue.add(m.group()); 
     log("FOUND : " + m.group()); 
     log("REPLACEMENT : " + m.replaceAll("Ryan")); 
     a.getChild("LINE").setText(m.replaceAll("Ryan")); 
     XMLOutputter newDoc = new XMLOutputter(); 
     newDoc.setFormat(Format.getPrettyFormat()); 
     newDoc.output(document, new FileWriter(
       "C:\\Users\\Ryan\\workspace\\Tragic\\result" + xml.getName())); 
     //counter(); 
    } 
} 

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

a.getChild("LINE").setText(m.replaceAll("Ryan")); 

Он никогда не работает. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

+0

Я сделал это .. это не сделало разницу .. – ryekayo

+0

я вижу проблему. Вы обновляете элемент A.get ...., но записываете «документ» в файл. Вместо обновления вызова getChild в «документе» и записи документа в файл. – kosa

+0

@ Nambari, ooh Im рад, что вы это поняли? Можете ли вы дать ответ о том, что именно я должен делать. Извините, я все еще изучаю, как использовать методы JDOM ... – ryekayo

ответ

2

Я вижу проблему. Вы обновляете элемент a.getChild("LINE"), но записываете документ в файл.

Как это решить?

Update document дочерний объект, что-то вроде document.getChild("LINE") (или) написать элемент в файл, как newDoc.output(a,......)

+0

Ненавижу, чтобы спросить, но могли бы вы рассказать на основе моего кода, что нужно кормить для второго параметра findVirtue (String , Элемент)? Код не записывает всю информацию в новые XML-документы, которые я создал ... – ryekayo

+0

Я не могу точно сказать, но я предполагаю, что здесь у вас избыточный код. 1) Тот, кто вызывает findVirtue (...), передает элемент из XML, и вам нужно действовать по этому поводу. Если это не так, то 2) Второй параметр бесполезен, просто удалите и оперируйте документ вместо a.getchild ... – kosa

+0

Да, если я удалю второй параметр и вызову метод, я получаю NPE. .. – ryekayo

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