2016-06-08 7 views
1

Ich habe einen Ordner ("Container") innerhalb dieser Ich habe einige. Txt-Dateien, die tatsächlich XML enthält. Alle Dateien haben ein gemeinsames Element <Number>, das ich für alle XML-Dateien um 1 erhöhen möchte. jede Hilfe.Lesen von Ordner und aktualisieren Sie den XML-Tag-Wert

Ich habe die Änderung für eine einzelne .txt-Datei durchgeführt, die in Ordnung ist: -

package ParsingXML; 
import java.io.File; 
import java.io.IOException; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import org.w3c.dom.Document; 
import org.w3c.dom.NamedNodeMap; 
import org.w3c.dom.Node; 
import org.xml.sax.SAXException; 
public class ReadAndModifyXMLFile { 
    public static final String xmlFilePath = "C:\\Users\\PSINGH17\\Desktop\\testFile.txt"; 

    public static void main(String argv[]) { 

    try { 

      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 

      Document document = documentBuilder.parse(xmlFilePath); 

      // Get employee by tag name 
      //use item(0) to get the first node with tag name "employee" 
      Node employee = document.getElementsByTagName("employee").item(0); 

      // update employee , increment the number 
      NamedNodeMap attribute = employee.getAttributes(); 
      Node nodeAttr = attribute.getNamedItem("number"); 
String str= nodeAttr.getNodeValue(); 
System.out.println(str); 
int val= Integer.parseInt(str); 
System.out.println(val); 
val=val+1; 
System.out.println(val); 
String final_value= String.valueOf(val); 
System.out.println(final_value); 
      nodeAttr.setTextContent(final_value); 

      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 

      Transformer transformer = transformerFactory.newTransformer(); 
      DOMSource domSource = new DOMSource(document); 

      StreamResult streamResult = new StreamResult(new File(xmlFilePath)); 
      transformer.transform(domSource, streamResult); 



     } catch (ParserConfigurationException pce) { 
      pce.printStackTrace(); 
     } catch (TransformerException tfe) { 
      tfe.printStackTrace(); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } catch (SAXException sae) { 
      sae.printStackTrace(); 
     } 
    } 
} 

XML-Datei: -

<?xml version="1.0" encoding="UTF-8" standalone="no"?><company> 


<employee number="14"> 

    <firstname>Pranav</firstname> 

    <lastname>Singh</lastname> 
    <email>[email protected]</email> 


    <salary>1000</salary> 

</employee> 


</company> 
+0

Bitte zeigen Sie, was Sie bereits versucht haben – mnwsmit

+0

@mnwsmit: - Bitte überprüfen Sie jetzt. – sunny

Antwort

0

dieser Code So verwendet die Anfangswert Ziffern nach dem Hash, um den Zähler zu starten. Dann iteriert es durch alle Dateien im Ordner. Die erste Datei erhält den Anfangswert, der Rest erhält inkrementierte Werte.

import org.w3c.dom.Document; 
import org.w3c.dom.NamedNodeMap; 
import org.w3c.dom.Node; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import java.io.File; 

public class TestFile { 
    public static final String xmlFileFolder = "C:\\Rahul\\test"; 
    private static final String initialValue = "450-000-1212"; 

    public static void main(String argv[]) { 
     int baseValue = Integer.parseInt(getValueAfterLastDash(initialValue)); 
     System.out.println("startValue " + baseValue); 
     File folder = new File(xmlFileFolder); 
     for (File file : folder.listFiles()) { 
      try { 
       DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 

       Document document = documentBuilder.parse(file); 

       Node employee = document.getElementsByTagName("employee").item(0); 
       NamedNodeMap attribute = employee.getAttributes(); 
       Node nodeAttr = attribute.getNamedItem("number"); 
       System.out.println(getValueBeforeLastDash(initialValue) + baseValue); 
       nodeAttr.setTextContent(getValueBeforeLastDash(initialValue) + baseValue); 

       TransformerFactory transformerFactory = TransformerFactory.newInstance(); 

       Transformer transformer = transformerFactory.newTransformer(); 
       DOMSource domSource = new DOMSource(document); 

       StreamResult streamResult = new StreamResult(file); 
       transformer.transform(domSource, streamResult); 
       baseValue++; 
      } catch (Exception ignored) { 
      } 
     } 
    } 

    private static String getValueAfterLastDash(String initialValue) { 
     return initialValue.substring(initialValue.lastIndexOf('-') + 1, initialValue.length()); 
    } 

    private static String getValueBeforeLastDash(String initialValue) { 
     return initialValue.substring(0, initialValue.lastIndexOf('-') + 1); 
    } 
} 
+0

hier gehen Sie pranav .. –

+0

Anstatt nur einfach einen Block von Code einfügen, ich denke, es wäre toll, wenn Sie eine kurze Beschreibung hinzufügen könnten, was Sie geschrieben, geändert oder hinzugefügt, vielleicht sogar warum Sie getan haben, was Sie hat getan. – Dave

+0

@sdotdi Ich habe eine harte Zeit mit dieser Website für die Beantwortung. Ich rede mit Pranav auf Abruf!, Wird die Antwort aktualisieren, sobald ich verstehe, wie es geht! –

Verwandte Themen