2016-08-09 79 views
0

Ich habe meine XSD-Dateien mithilfe von JAXB in JAVA-Objekte konvertiert.JAXB Such- und Löschelementknoten

Als nächstes habe ich die XML-Datei auf diese Objekte entpackt.

Jetzt ist mein Ziel hinzufügen, löschen, suchen Sie einige Knoten in der XML.

Ich finde es sehr schwer, dies in JAXB zu tun.

für z.B. ich möchte jeden Knoten, dessen Attribut name = "Gewicht".

Wie mache ich das in JAXB-Objekten?

In dom XML ist das Suchen/Aktualisieren/Löschen sehr einfach.

Wie kann ich dies in JAXB tun?

oder beispiel

Ich habe einen Attributnamen „Gewicht“ zu entsprechen, die vom Typ interfaceClass ist.

<CAEXFile> 
<InterfaceCLASSLIB> 
<interfaceclass> 
<attribute name="weight> 
<../> 

Also um auf die Interface-Klasse zuzugreifen.

Ich werde durch alle Objekte Hierarchie gehen müssen.

CAEXFile ---> get SchnittstelleClassLib() ---> getInterfaceClass() -> gettAttributes();

Beachten Sie, dass jede get-Methode eine Array-Liste zurückgibt, da es viele Interface-Klassen, Attribute e.t.c, geben kann.

Dies ist eine sehr teure Methode dann.

Ich habe keine vordefinierte Funktion zum Erreichen eines bestimmten Knotens gefunden.

Jede Hilfe wäre willkommen. Sollte DOM-XML für XML zurückdrehen, fügen Sie delete update ein.

Antwort

1

Wie Sie sagten, die Suche nach Knoten mit JAXB ist teuer. Ich würde XPathFactory verwenden, die als Teil von Standard-Java verfügbar sind, um die gewünschten Knoten zu erhalten. wie unten:

public static void main(String[] args) throws Exception 
{ 
    XPathFactory xpf = XPathFactory.newInstance(); 
    XPath xpath = xpf.newXPath(); 

    InputSource xml = new InputSource("<your_path_to_input.xml>"); 
    Object result = (Object) xpath.evaluate("//attribute[@name=\"weight\"]", xml, XPathConstants.NODESET); 
    if (result != null && result instanceof NodeList) 
    { 
     NodeList nodeList = (NodeList)result; 
     if (nodeList.getLength() > 0) 
     { 
     for (int i = 0; i < nodeList.getLength(); i++) 
     { 
      org.w3c.dom.Node node = nodeList.item(i); 
      System.out.println(node.getNodeValue()); 
     } 
     } 
    } 
} 

XPath //attribute[@name="weight"] ist, sucht rekursiv xml für attribute Knoten, die ein Attribut name mit Wert weight

genannt haben