nodename ändern mit dom parser?



  • hoi
    erst mal dazu was ich hab:
    einmal ein xml das ich haben möchte sollt ungefähr so aussehn:

    <gesAnl>
    	<hf001 FeKennung="0101">
    	   <einheit1 EinheitenKennung="1">
    	      <sensoren>
    	         <e_0101_sv>
    	            <distanz>2700</distanz>
    	            <streuung>0</streuung>
    	            <absAdr>e0.0</absAdr>
    	         </e_0101_sv>
    	      </sensoren>
    	      <motor>
    	         <a_0101_v>a0.0</a_0101_v>
    	         <a_0101_r>a0.1</a_0101_r>
                      <v1>1</v1>
    	      </motor>
    	      <typ>linear</typ>
              <laenge>2800</laenge>
    	     <nextEinheit>2;</nextEinehit>
    	   </einheit1>
                <nextFe>0102;</nextFe>
    	</hf001>
    </gesAnl>
    

    und habe mehrere templates die zb. so aussehn:

    <hf001>
      <einheit1>
       <sensoren>
    	<e_q_sv>
    		<distanz>2700</distanz>
    		<streuung>0</streuung>		
    	</e_q_sv>
       </sensoren>
       <motoren>
    		<a_q_v/>
    		<a_q_r/>
    		<v1>1</v1>
       </motoren>
       <typ>linear</typ>
       <laenge>2800</laenge>
    </einheit1>
    </hf001>
    

    ich kopier das untere xml einfach ins obere rein.
    tags wie absAdr, für ich nachträglich ein, bzw. den text dafür (zb.: e0.0)

    mein problem besteht jetzt darin, dass ich den nodename ändern müsste,
    zb. von a_q_v auf a_0101_v,
    über google hab ich aber keine hinweise gefunden wie das gehn könnte.

    könnt mir dabei wer helfen?

    danke schonmal im voraus
    lg peace

    //edit: vergessen:
    benutz java (welch wunder ^^)
    und den dom parser der bei der jdk dabei is, ich glaub das is eh xerces



  • ok mit der Klasse document kann ich den nodename ändern
    aber wie kann ich einen beliebigen Node in ein Document umwandeln.
    mit der methode node.getOwnerDocument() bekomm ich ja wieder das Document
    des gesamten XML baums.

    und ein ((Document)node).renameNode() funktionert nicht (classCastException)

    aber anscheinend will/kann mir eh keiner helfen 😞

    im c++ abteil wurd ich wenigstens angmault, und auf die richtige richtung
    gebracht.

    peace



  • Peace in Schule schrieb:

    aber anscheinend will/kann mir eh keiner helfen 😞

    im c++ abteil wurd ich wenigstens angmault, und auf die richtige richtung
    gebracht.

    Nicht gleich eingeschnappt sein! 😉
    So viel ist im Java-Forum nicht los, dass es sich lohnt alle paar Stunden reinzuschauen.

    Peace in Schule schrieb:

    ...
    und ein ((Document)node).renameNode() funktionert nicht (classCastException)
    ...

    Warum sollte es auch. Offenbar ist dein Node-Exemplar kein Document. Wenn du dir die API-Dokumentation für die Methode renameNode genau anschaust, solltest du eigentlich feststellen, dass ein Cast zu Document auch gar nicht nötig ist.

    Wenn du ein Exemplar eines Knotens hast, welches du umbenennen möchtest, dann gehe z. B. wie folgt vor:

    if (element1.getNodeType() == Node.ELEMENT_NODE)
               {
                  element1 = doc.renameNode(element1, "namensraum", "nameneu");
               }
    

    Die API-Dokumention verrät dir auch, dass nur Knoten vom Typ ATTRIBUTE_NODE und ELEMENT_NODE so geändert werden dürfen.

    Im Übrigen kannst du, wenn du den Typ des Knotens festgestellt hast, ihn ohne Gefahr so casten:

    if (element1.getNodeType() == Node.ELEMENT_NODE)
               {
                System.out.println(((Element)element1).getNodeName());
               }
               else if (element1.getNodeType() == Node.DOCUMENT_NODE)
               {
                     //usw.
               }
    


  • 🙂
    vielen vielen dank
    und wieder hab ich massig in der doku übersehn ^^
    sollt mein englisch echt aufbessern

    ich bemüh mich ja viel so zu suchen und selbst auszuprobiern, aber
    is halt für nen anfänger immer schwierig

    also nochmals danke
    werds gleich mal ausprobiern,
    und meine kleine methode die das nodename ändern macht,
    wegwerfen, funktioniert ohnehin noch net richtig *gg*

    lg peace


Anmelden zum Antworten