title: How to replace a part of a string in an xml file?
body: <p>I have an xml file with something like this:</p>
  
  <pre><code>&lt;Verbiage&gt;
          The whiskers plots are based on the responses of incarcerated 
          &lt;Choice&gt;
              &lt;Juvenile&gt; juveniles who have committed sexual offenses. &lt;/Juvenile&gt;
              &lt;Adult&gt; adult sexual offenders. &lt;/Adult&gt;
          &lt;/Choice&gt; 
          If the respondent is a 
          &lt;Choice&gt;
              &lt;Adult&gt;convicted sexual offender, &lt;/Adult&gt;
              &lt;Juvenile&gt;juvenile who has sexually offended, &lt;/Juvenile&gt;
          &lt;/Choice&gt; 
          #his/her_lc# percentile score, which defines #his/her_lc# position 
          relative to other such offenders, should be taken into account as well as #his/her_lc# T score. Percentile 
          scores in the top decile (&gt; 90 %ile) of such offenders suggest that the respondent 
          may be defensive and #his/her_lc# report should be interpreted with this in mind.
      &lt;/Verbiage&gt;
  </code></pre>
  
  <p>I am trying to find a way to parse the xml file (I've been using DOM), search for #his/her_lc# and replace that with "her". I've tried using FileReader,BufferedReader, string.replaceAll, FileWriter, but those didn't work.</p>
  
  <p>Is there a way I could do this using XPath?</p>
  
  <p>Ultimately I want to search this xml file for this string and replace it with another string.</p>
  
  <p>do I have to add a tag around the string I want it parse it that way?</p>
  
  <p>Code I tried:</p>
  
  <pre><code>protected void parse() throws ElementNotValidException {
      try {
          //Parse xml File
          File inputXML = new File("template.xml");
          DocumentBuilderFactory parser = DocumentBuilderFactory.newInstance(); // new instance of doc builder
          DocumentBuilder dParser = parser.newDocumentBuilder(); // calls it
          Document doc = dParser.parse(inputXML); // parses file
  
          FileReader reader = new FileReader(inputXML);
          String search = "#his/her_lc#";
          String newString;
  
          BufferedReader br = new BufferedReader(reader);
          while ((newString = br.readLine()) != null){
              newString.replaceAll(search, "her");
          }
  
          FileWriter writer = new FileWriter(inputXML);
          writer.write(newString);
          writer.close();
  
      } catch (ParserConfigurationException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      } catch (SAXException e) {
          e.printStackTrace();
      }
  </code></pre>
  
  <p>Code I was given to fix:</p>
  
  <pre><code>try {
          File inputXML = new File("template.xml"); // creates new input file
          DocumentBuilderFactory parser = DocumentBuilderFactory.newInstance(); // new instance of doc builder
          DocumentBuilder dParser = parser.newDocumentBuilder(); // calls it
          Document doc = dParser.parse(inputXML); // parses file
          doc.getDocumentElement().normalize();
  
          NodeList pList = doc.getElementsByTagName("Verbiage"); // gets element by tag name and places into list to begin parsing
  
          int gender = 1; // gender has to be taken from the response file, it is hard coded for testing purposes
          System.out.println("----------------------------"); // new line
  
          // loops through the list of Verbiage tags
          for (int temp = 0; temp &lt; pList.getLength(); temp++) {
              Node pNode = pList.item(0); // sets node to temp
  
              if (pNode.getNodeType() == Node.ELEMENT_NODE) { // if the node type = the element node
                  Element eElement = (Element) pNode;
                  NodeList pronounList = doc.getElementsByTagName("pronoun"); // gets a list of pronoun element tags
  
                  if (gender == 0) { // if the gender is male
  
                      int count1 = 0;
                      while (count1 &lt; pronounList.getLength()) {
  
                          if ("#he/she_lc#".equals(pronounList.item(count1).getTextContent())) {
                              pronounList.item(count1).setTextContent("he");
                          }
  
                          if ("#he/she_caps#".equals(pronounList.item(count1).getTextContent())) {
                              pronounList.item(count1).setTextContent("He");
                          }
  
                          if ("#his/her_lc#".equals(pronounList.item(count1).getTextContent())) {
                              pronounList.item(count1).setTextContent("his");
                          }
                          if ("#his/her_caps#".equals(pronounList.item(count1).getTextContent())) {
                              pronounList.item(count1).setTextContent("His");
                          }
  
                          if ("#him/her_lc#".equals(pronounList.item(count1).getTextContent())) {
                              pronounList.item(count1).setTextContent("him");
                          }
                          count1++;
                      }
                      pNode.getNextSibling();
  
                  } else if (gender == 1) { // female
                      int count = 0;
                      while (count &lt; pronounList.getLength()) {
  
                          if ("#he/she_lc#".equals(pronounList.item(count).getTextContent())) {
                              pronounList.item(count).setTextContent("she");
                          }
  
                          if ("#he/she_caps3".equals(pronounList.item(count).getTextContent())) {
                              pronounList.item(count).setTextContent("She");
                          }
  
                          if ("#his/her_lc#".equals(pronounList.item(count).getTextContent())) {
                              pronounList.item(count).setTextContent("her");
                          }
                          if ("#his/her_caps#".equals(pronounList.item(count).getTextContent())) {
                              pronounList.item(count).setTextContent("Her");
                          }
  
                          if ("#him/her_lc#".equals(pronounList.item(count).getTextContent())) {
                              pronounList.item(count).setTextContent("her");
                          }
                          count++;
                      }
                      pNode.getNextSibling();
                  }
              }
          }
          // write the content to file
          TransformerFactory transformerFactory = TransformerFactory.newInstance();
          Transformer transformer = transformerFactory.newTransformer();
          DOMSource source = new DOMSource(doc);
  
          System.out.println("-----------Modified File-----------");
          StreamResult consoleResult = new StreamResult(System.out);
          transformer.transform(source, new StreamResult(new FileOutputStream("template.xml"))); // writes changes to file
      } catch (Exception e) {
          e.printStackTrace();
      }
  </code></pre>
  
  <p>}</p>
  
  <p>This code I think would work if I could figure out how to associate the tag Pronoun with the pronounParser that this code is in.</p>