XML Parser Problem



  • Hallo,

    ich habe ein Softwareprojekt mit einem vorhandenen XML Parser übernommen und die Erweiterung einer der betroffenen XML Dateien führt zu Problemen.

    Die XML Datei wird hierarchisch ausgewertet:

    Bisherige Struktur:

    <NetworkAddressing>
    <RemoteAddressList>
    <RemoteAddress>
    <AR_Name>Name 1</AR_Name>
    <NetAddr Type="IPADDR">10.0.0.0</NetAddr>
    </RemoteAddress>
    </RemoteAddressList>
    </NetworkAddressing>

    neu:
    <NetworkAddressing>
    <RemoteAddressList>
    <RemoteAddress>
    <AR_Name>Name 1</AR_Name>
    <NetAddr Type="IPADDR">10.0.0.0</NetAddr>
    </RemoteAddress>
    <RemoteAddress>
    <AR_Name>Name 2</AR_Name>
    <NetAddr Type="IPADDR">10.0.0.0</NetAddr>
    </RemoteAddress>
    </RemoteAddressList>
    </NetworkAddressing>

    Der Parser orientiert sich entlang der Ebenen und soll die IP-Addr bei bedarf durch eine neue ersetzen. Allerdings kann er natürlich die zweite IP nicht finden, da sein Suchmuster bei der ersten schon zuschlägt.

    Code:

    /// \brief Parses an option at the current iterator position
    	void parseOption(sysman::XMLOptionChange & outOption){
    			// PARSE
    			// igus-ip= 10.0.0.0 => <NetAddr>REPLACEMENT</NetAddr>
    			outOption.NodeHirachy.push_back("STACK_CFG");
    			outOption.NodeHirachy.push_back("NetworkAddressing");
    			outOption.NodeHirachy.push_back("RemoteAddressList");
    			outOption.NodeHirachy.push_back("RemoteAddress");
    			outOption.NodeHirachy.push_back("NetAddr");
    	}
    

    Ich hatte versucht irgendwas mit dem AR Name zu machen aber komme nicht weiter.

    Kann mir jemand einen kleinen Schubs geben?

    Dankeschön

    Nils



  • Wäre ja mal praktisch wenn du uns sagst welcher XML Parser dort verwendet wird. Da wird es ja sicher eine Möglichkeit geben durch XML Struktur zu iterieren und nicht nur das erste gefundene Element auszugeben.



  • Hallo,
    danke für die schnelle Antwort.
    Ich glaube der Parser ist ein Eigenbau, er funktioniert leider mit einer hardkodierten Schlüsselworterkennung so dass ich bei keienr erweiterung ohne Änderung am Code auskomme.

    Prinzipiell würde ich den Parser ja neu anlegen, aber der Releasetermin ist Anfang nächster Woche und die haben diese Änderung ohne Rücksprache gemacht und ich bin noch echt neu in C++

    Was brauchst Du an Code?

    Gruß



  • Hallo,

    gibt es ne Möglichkeit über die obige Funktion das hier zu erkennen?

    <AR_Name>Name 1</AR_Name>

    Nils



  • jevermeister79 schrieb:

    Prinzipiell würde ich den Parser ja neu anlegen, aber der Releasetermin ist Anfang nächster Woche und die haben diese Änderung ohne Rücksprache gemacht und ich bin noch echt neu in C++

    Ich bin zwar nicht in der Branche tätig, aber es scheint mir doch sehr ungewöhnlich wenn kurz vorm Release irgendjemand nicht abgesprochene Änderungen machen möchte. Vielleicht solltest du mal mit deinem Betreuer/Chef oder sowas reden bevor du alles mögliche änderst. Außerdem kann dir hier niemand dabei helfen eueren Selbstbau XML Parser zu bedienen, da wir keinen Code oder Dokumentation dazu haben. Auch dafür muss es doch Ansprechpartner geben, die einem sagen können wie man mit diesem XML Parser arbeitet oder wo man die Dokumentation findet (falls vorhanden).



  • @sebi707
    Ach ne Sebi, so ungewöhnlich ist das leider nicht 🙂
    Ich musste lachen wie ich das gelesen habe, aber nicht weil ich jevermeister79 nicht glaube, sondern eher nach dem Motto "Ha ha, Klassiker!".

    In vielen Firmen musst du froh ein wenn die Verkäufer nicht Zeug (Software, Funktionen) verkaufen von dem die Entwicklung noch nie 'was gehört hat.
    Bzw. wenn sie es die Entwicklung danach wenigstens wissen lassen 😉

    @jevermeister79
    Jo, neu in C++ und dann ein hausgemachter XML Parser, das stell' ich mir "spannend" vor. Dummerweise hat sebi707 aber Recht, wir können dir anhand dieses minimalen Codeschnippsels nicht sagen was du wo ändern musst -- wir kennen den Code ja nicht.



  • Hi, danke fürs Verständnis. Ist halt grad ne blöde Situation, der Kollege der das alles mit C verwaltet hat hat gekündigt, ich hatte vor zwei Jahren mal ne Schulung und jetzt hab ich nich schnell genug nein gesagt. Ich muss mich halt jetzt reinfinden und möchte das auch gerne. Jetzt kämpfe ich mit C Object Model udn seinem komischen Stil. Habe aber herausgefunden dass es sich um RapidXML handelt. Ich versuch mal weiter zu kommen. Nils p.s.: Danke fürs versuchen zu helfen



  • Hallo jevermeister79,

    Dein Code-Schnipsel hat mit RapidXML nichts zu tun. Ich nehme an, es handelt sich um einen selbstgestrickten Aufsatz, der bestimmte Stellen in einer XML-Datei auffindet.
    Könnte man diese selbstgestrickten Code auch weg lassen?
    Mit RapidXML kannst Du die entsprechenden Stellen auch so aufspüren und verändern bzw. erweitern.

    Deine Aufgabe ist es, die IP-Adressen (XML-Knoten "NetAddr") zu ändern; nicht neue hinzuzufügen - richtig?

    Gruß
    Werner



  • So wie ich das verstehe muss er das XML File/Dokument nichtmal ändern sondern bloss auslesen.
    Und halt abhängig von irgend einer Bedingung entweder

    /NetworkAddressing/RemoteAddressList/RemoteAddress[AR_Name='Name 1']/NetAddr

    oder eben

    /NetworkAddressing/RemoteAddressList/RemoteAddress[AR_Name='Name 2']/NetAddr

    @jevermeister79
    Kannst du uns mal den Code zeigen der diese parseOption Funktion aufruft? Also interessant wäre z.B. wie outOption dann in weiterer Folge verwendet wird um irgendwas im XML File zu finden.


Anmelden zum Antworten