[tinyxpath] XNp_get_xpath_node liefert falsche nodes?



  • aaalso ich habe eine Datei, die sieht so aus:

    <?xml version="1.0" encoding="UTF-8"?>
    <game>
      <switch end="good" id="1">
        <modify type="attribute">
          <path>//object/@name</path>
          <objectid>1</objectid>
          <modified>Kurt</modified>
        </modify>
      </switch>
      <switch end="bad" id="2">
      	<modify type="attribute">
      		<path>//object/@active</path>
      		<objectid>1</objectid>
      		<modified>false</modified>
      	</modify>
      </switch>
      <object active="true" id="1" name="Hans"/>
      <action name="kill">
      	<who>0</who>
      	<whom>1</whom>
      	<switches>2</switches>
      </action>
      <action name="rename">
        <who>0</who>
        <whom>1</whom>
        <switches>1</switches>
      </action>
    </game>
    

    ich hab mir für den Zugriff tinyxpath kompiliert
    folgdenen Zugriff mache ich:

    /game/action[@name='kill']

    Das Ganze mit diesem Code:

    // finde alle Aktionen mit dem Namen action@name
    		string actionName = TinyXPath::S_xpath_string(action, ACTION_NAME).c_str();
    		actionName = REQUEST_ACTION_BY_NAME(actionName);
    
    		TinyXPath::xpath_processor prc(doc.FirstChild(), actionName.c_str());
    		unsigned ui = prc.u_compute_xpath_node_set();
    
    		#ifdef _TEST_
    				cout << "requesting " << actionName.c_str() << endl;
    				cout << ui << " items found " << endl;
    		#endif
    
    		// hole füge sämtliche Objekte dem ObjectPool hinzu
    		for (unsigned i = 0; i < ui; i ++) {
    			TiXmlNode *item = prc.XNp_get_xpath_node(i);
    
    			#ifdef _TEST_
    					cout << TinyXPath::S_xpath_string(item, "/action/@name").c_str() << endl;
    			#endif
    		}
    

    Was ich jetzt aber zurück bekomme ist leider kein Element mit dem actionname 'kill' sondern 'rename'
    Auch bei anderen Requests ist das so. Immer, wenn ich über die Konstellation
    prc.u_compute_xpath_node_set() / prc.XNp_get_xpath_node(i) arbeite, kommt nicht das richtige, sondern sinnfreierweise das letzte item in der liste heraus, welches dem xpath ohne Attributprüfung entspricht..

    kann mir wer sagen, was hier kaputt ist?


Anmelden zum Antworten