2016-10-04 5 views
0

が、私はこのようなものでxmlファイルを持っている:私は(私はDOMを使用してきた)xmlファイルを解析する方法を見つけようとしていますxmlファイルの文字列の一部を置き換える方法は?

<Verbiage> 
     The whiskers plots are based on the responses of incarcerated 
     <Choice> 
      <Juvenile> juveniles who have committed sexual offenses. </Juvenile> 
      <Adult> adult sexual offenders. </Adult> 
     </Choice> 
     If the respondent is a 
     <Choice> 
      <Adult>convicted sexual offender, </Adult> 
      <Juvenile>juvenile who has sexually offended, </Juvenile> 
     </Choice> 
     #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 (> 90 %ile) of such offenders suggest that the respondent 
     may be defensive and #his/her_lc# report should be interpreted with this in mind. 
    </Verbiage> 

を、#のために彼/ her_lc#を検索していることを置き換えます彼女と"。私はFileReader、BufferedReader、string.replaceAll、FileWriterを使用しようとしましたが、これらは機能しませんでした。

XPathを使用してこれを行う方法はありますか?

最終的に、このXMLファイルでこの文字列を検索し、別の文字列に置き換えたいとします。

私はそれがそのように解析したい文字列の周りにタグを追加する必要がありますか?

コード私が試した:私は修正するために与えられた

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(); 
    } 

コード:

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 < 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 < 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 < 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(); 
    } 

}

このコードを私はタグを関連付けする方法を見つけ出すことができれば働くだろうと思いますこのコードがある代名詞パーサーとの代名詞

+0

それはそこにあると言います。私はfilereaderとfile writerを使ってstring.replace allを使ってみました。私はどのように正規表現を検索するか、ここで役立つ場合はtokenizerを使用する方法を知っていない。私はDOMを使用してファイルを解析することができますが、私は探している単語はタグを持っていないので、私はタグで新しいタグと検索要素を追加する方法や、誰かが役に立った – Felicia

+1

「それらはうまくいかない」とどういう意味ですか?それは例外を発生させますか?予期しない結果がありますか?人々があなたを助けることができるように、コード/スタックトレースを貼り付けてください。 – eltabo

+0

FileReader/Writerは何もしませんでした。それは走ったが、私が検索した文字列は変更されなかった。理由は分かりません。 – Felicia

答えて

1

私はこの例とあなたのテンプレートを使用しましたate.xml、私はそれが動作すると思います。

public static void main(String[] args) { 

     File inputXML = new File("template.xml"); 
     BufferedReader br = null; 
     String newString = ""; 
     StringBuilder strTotale = new StringBuilder(); 
     try { 

     FileReader reader = new FileReader(inputXML); 
     String search = "#his/her_lc#"; 


     br = new BufferedReader(reader); 
     while ((newString = br.readLine()) != null){ 
      newString = newString.replaceAll(search, "her"); 
      strTotale.append(newString); 
     } 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } // calls it 
     finally 
     { 
      try { 
       br.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 


     System.out.println(strTotale.toString()); 


    } 

まず、あなたはでReplaceAllの結果再割り当てする必要があります。第二に、私はすべての行を収集するためのStringBufferを使用

newString = newString.replaceAll(search, "her"); 

を。

このヘルプが欲しいです。

関連する問題