2017-05-27 4 views
1

Entfernen habe ich eine XML-Datei, die diese enthält:ein Element aus XML-Datei Java

<class> 
<Video>Spiderman</Video> 
<Video>Superman</Video> 
</class> 

Ich möchte einer von ihnen Eingänge basierend auf, was ein Benutzer entfernen. Was ich bisher habe, ist

for (int x=0; x<videodatabase.size(); x++) { 
      if (inputVideo.getText().contentEquals(videodatabase.get(x))) { 
       try { 
        String filepath = "videodatabase.xml"; 
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
        Document doc = docBuilder.parse(filepath); 

        // I want to remove the <Video>name of the video</Video> from the xml here. 

        TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
        Transformer transformer = transformerFactory.newTransformer(); 
        DOMSource source = new DOMSource(doc); 
        StreamResult result = new StreamResult(new File(filepath)); 
        transformer.transform(source, result); 
       }  
       catch(ParserConfigurationException pce){ 
        pce.printStackTrace(); 
       } 
       catch(TransformerException tfe){ 
        tfe.printStackTrace(); 
       } 
       catch(IOException ioe){ 
        ioe.printStackTrace(); 
       } 
       catch(SAXException sae){ 
        sae.printStackTrace(); 
       } 
      } 
     } 

Wie Sie die Programmprüfung sehen, um zu sehen, ob der Name des Videos in der Array-Liste genannt videodatabase eingegeben ist. Wenn es ist, öffnet es die XML-Datei und bereitet vor, das eingegebene Video zu entfernen. Aber ich stecke hier fest. Ich möchte, dass die XML-Datei aussehen:

<class> 
<Video>Spiderman</Video> 
</class> 
+0

Es gibt mehrere Möglichkeiten xml in Java zu manipulieren. Da Sie TransformerFactory verwenden, möchten Sie offenbar XSLT verwenden. Die eigentliche Frage lautet also: "Wie entferne ich ein Element mit XSLT?". Übrigens sollten Sie die XSLT-Vorlage an den Aufruf newInstance() übergeben. Ein anderer Weg wäre, JAXB zu verwenden, um ein Java-Modell des xml, remote one-Elements zu erstellen und es dann erneut in xml zu serialisieren. – Peter

+0

Ich stimme mit @Peter nicht überein. Die 'TransformerFactory' ist die Standardmethode zum Serialisieren eines DOM-Dokuments. Dies bedeutet nicht automatisch, dass XSLT verwendet werden muss. Ich denke, es ist viel einfacher, einen Knoten mit einfacher DOM-Manipulation zu entfernen als mit XSLT. – vanje

Antwort

1

Hier ist der fehlende Teil mit XPath:

// Get a XPath instance 
XPath xpath = XPathFactory.newInstance().newXPath(); 
// Find the Video element with text 'Superman' 
Element supermanVideo = (Element) xpath.evaluate("/class/Video[. = 'Superman']", 
    doc, XPathConstants.NODE); 
if(supermanVideo != null) { 
    // Remove this element from the parent 
    supermanVideo.getParentNode().removeChild(supermanVideo); 
} 
// Serialize the XML document ... 
+0

anstelle der Literal Superman, können Sie ein Array verwenden? Bonuspunkte für die Aktualisierung der Antwort ... – Thufir

Verwandte Themen