|
|
dynamische suche nach einem bestimmten Tag |
|
mnikoli |

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 10.05.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.05.2010, 08:30
Titel: dynamische suche nach einem bestimmten Tag
|
 |
|
 |
|
Hallo an alle,
ich habe eine xml-Template gelesen (xmlread) und suche nun nach einem bestimmten Tag (CHAPTER), um diesen zu löschen. Funktioniert auch alles ganz gut. Bisher habe ich dies so gelöst:
docu = 'datei.xml';
xmlDocu = xmlread(docu);
allListItems = xmlDocu.getElementsByTagName('CHAPTER');
node=allListItems.item(22);
mit diesem Code suche ich nach diesem Tag. Jedoch habe ich vorher geschaut an welcher position sich der Tag im diesem Template befindet. So kann ich ihn direkt ansprechen.
Es kann jedoch sein, dass sich dieses Template irgendwann man verändert und an der position allListItems.item(22); plötzlich ein anderer Tag befindet. Damit lösche ich den falschen. Ich möchte jedoch weiterhin den Tag CHAPTER ansprechen können, d.h. nach ihm suchen können. WIe geht das genau?
Dies habe ich bisher versucht:
Vergleich=xmlDocu.getElementsByTagName('CHAPTER').item(21).getChildNodes.getTextContent;
Vergleich = char(Vergleich)
if strcmp('SW-Test','Vergleich')
disp('Hello');
else
disp('NOT FOUND');
jedoch sagt er mir immer : NOT FOUND
Ich möchte dynamisch suchen können, unabhängig vom Template.
Danke
|
|
|
|
|
Zenon |

Forum-Guru
|
 |
Beiträge: 292
|
 |
|
 |
Anmeldedatum: 20.01.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.05.2010, 09:29
Titel:
|
 |
1. 'Vergleich' ohne Hochkomma, da Variable
2. Was soll diese Code Zeile bewirken
3. Dem 'Chapter' von vorneherein eine ID verpassen und dann mit
arbeiten.
|
|
|
mnikoli |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 10.05.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.05.2010, 10:25
Titel:
|
 |
|
 |
|
Hast Recht. Mir fällt auf, dass Vergleich keinen Sinn macht, da ich wieder nach einem bestimmten Tag "item(21)" suche. Somit wieder nicht dynamisch.
Das mit getElementByTag() habe ich versucht, jedoch habe ich das Problem, dass ich dann keine Folgemethode zu Löschen von Kindknoten habe.
------ Suche nach der ID ---------------------------------------------
particID = xmlDocu.getElementById('ID="ID99727363389097');
node = particID;
node=struct(node);
Die letzte Zeile mit struct () habe ich hinzugefügt, da mir sonst folgender Fehler auftritt:
??? Attempt to reference field of non-structure array.
Error in ==> getTests at 36
if(node.hasChildNodes())
------ Lösche alle Kindknoten des Tags der ID----------------------
if(node.hasChildNodes())
while(node.getLength >0)
node.removeChild(node.item(0));
end
end
Hie rkommt folgender Fehler, da node nicht diese Methode enthält:
??? Reference to non-existent field 'hasChildNodes'.
Error in ==> getTests at 36
if(node.hasChildNodes())
Als Anhang habe ich die Methoden von node bereitgestellt.
Wie komme ich nun dazu die Kindknoten zu löschen?
Beschreibung: |
|
 Download |
Dateiname: |
methods.JPG |
Dateigröße: |
58.05 KB |
Heruntergeladen: |
490 mal |
|
|
|
Zenon |

Forum-Guru
|
 |
Beiträge: 292
|
 |
|
 |
Anmeldedatum: 20.01.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.05.2010, 10:56
Titel:
|
 |
du darfst node nicht in eine struct umwandeln.
Versuch es stattdessen mal so:
Hab es nicht getestet...ACHTUNG das sollte alle childNodes von node löschen...
|
|
|
mnikoli |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 10.05.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.05.2010, 11:51
Titel:
|
 |
Warum darf ich node nicht in ein struct umwandeln?
Habe jetzt deinen Vorschlag versucht:
--Tag finden---
node = xmlDocu.getElementById('ID="ID99727363389097');
----Löschen----
childNode = node.getFirstChild;
while ~isempty(childNode)
oldNode = childNode;
childNode = childNode.getNextSibling;
node.removeChild(oldNode);
end
Fehler tritt auf:
??? Attempt to reference field of non-structure array.
Error in ==> getTests at 32
childNode = node.getFirstChild;
Was sagt mir der Fehler überhaupt? Dass ich versuche auf ein Nicht-Struct Array zuzuweisen, oder? Das heißt, node sollte struct sein? Verstehe nicht..
Bitte einwenig Geduld mit mir
|
|
|
Zenon |

Forum-Guru
|
 |
Beiträge: 292
|
 |
|
 |
Anmeldedatum: 20.01.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.05.2010, 13:04
Titel:
|
 |
Was in der getElementById-Klammer steht ist schon die Id es gehört kein ID=... da rein:
Deine Fehlermeldung kam, weil er die Id 'ID=ID...' nicht gefunden hat (gibts auch nicht).
Die neue if-Verzweigung prüft ob node nicht leer ist (also ein node mit der ID gefunden wurde und ob dieser ein Element ist (und z.B. nicht ein KOmmentar).
|
|
|
mnikoli |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 10.05.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.05.2010, 07:00
Titel:
|
 |
|
 |
|
Also das Löschen gibt mir keinen Fehler mehr an. Allerdings tritt jetzt ein neuer Fehler auf:
---LESE TEMPLATE---
---SUCHE NACH CHAPTER ÜBER DIE ID---
---LÖSCHE ALLE KINDER VON CHAPTER ID---
---FÜGE NEUE KINDER HINZU---
Die letzte Zeile wird mir als Fehler erkannt:
??? Attempt to reference field of non-structure array.
Error in ==> getTests at 65
node.appendChild(LongName);
node hat doch keine methode "append.Child". Habe im letzten oder vorletzten Beitrag ein Bild eingefügt, wo alle Methoden von node aufgelistet sind.
Außerdem verstehe ich nicht warum mir bezüglich der oberen CODE´s kein Fehler angezeigt wird. Beim 3.Absatz "LÖSCHEN" greife ich mit der Methode getFirstChild auf node zu
. Wenn ich diese CODE-Zeile jedoch in das CommandWIndow direkt eingebe, bekomme ich die Fehlermeldung
??? Attempt to reference field of non-structure array.
Wieso bekomme ich also bei EIngabe der Code-Zeile in das COmmandWindow eine Fehlermeldung und im Gesamt-Code, wie oben zu sehen selbst nicht?
Danke
|
|
|
Zenon |

Forum-Guru
|
 |
Beiträge: 292
|
 |
|
 |
Anmeldedatum: 20.01.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.05.2010, 14:33
Titel:
|
 |
Hallo, bin zurück
das Bild, das Du angehängt hast zeigt die Methoden für die Klasse double (wie es auch drüber steht). node kennt die Methode appendChild.
Versuche es mal in dieser Reihenfolge...ansonsten fällt mir gerade nichts auf, was definitiv falsch wäre...
Das steht doch bei dir alles in einer großen Funktion oder?
Wenn Du den Kram im Cmd-Fenster eingibst, ist node dann auch richtig geladen worden? Es sollte genauso gehen, wie mit dem m-File...
|
|
|
mnikoli |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 10.05.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.06.2010, 06:47
Titel:
|
 |
Hi Zenon,
bin wieder zurück. War ne längere zeit im Ausland.
Danke dir für die Hilfe. Hat mir geholfen!
Gruß
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|