Ich habe ein XML-Dokument, und ich bin mit XmlTextReader von Namespace System.Xml dieses XML-Dokument zu analysieren und ich rufe die Event-Handler für verschiedene Typen von Knoten wie start(), Text etc ...Wie analysiert man ein XML-Dokument und ruft die Event-Handler (startElement, text) in C# auf, ohne den Stack zu verwenden, um sich den Kontext der Tags zu merken?
**while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
{
StringBuilder nodeNam = new StringBuilder(reader.Name);
startElement(nodeNam);**
Hier sind startElement(), text, endElement() usw. meine benutzerdefinierten Event-Handler. Ich habe die Definition für diese Ereignishandler angegeben. Um sich den Kontext der Tags im XML-Dokument zu merken, verwende ich stack. dh. Ein Tag in stack auf startElement() schieben und den Inhalt (Aufruf von text()) dieses Tags verarbeiten, indem der aktuelle Kontext vom Anfang des Stapels abgerufen wird. Und später, als ich auf das Ende dieses Tags stoße, habe ich dieses Tag gepoppt. So habe ich die Ereignishandler analysiert und codiert.
Aber ich möchte diese Parsing und Event-Handler-Erstellung ohne Verwendung eines Stapels erreichen. Kann mir jemand freundlich wissen, wie man dies in C# erreicht, ohne Stack zu verwenden, um sich an den aktuellen Kontext der Tags von XML-Dokument zu erinnern. Gibt es eine bessere Möglichkeit, XML-Parsing und das Generieren von Ereignishandlern zu erreichen, wenn der Parser auf startElement(), endElement(), Text(), startDocument() des XML-Dokuments stößt.
IN MY XML PARSING, I JUST WANT TO IDENTIFY startElement(), endElement(), characters(), etc, for each and every node (tag) in the document AND CALL THE EVENT HANDLER FUNCTIONS FOR start of an element (startElement()), end of an element (endElement()), text of the node (characters()). AND I DONT
müssen die Parsing in viel feineren Details. Mit XmlTextReader muss ich einen Stack verwenden, um den Kontext des aktuellen Tags zu erinnern, um die entsprechenden Event-Handler-Funktionen aufzurufen (startElement(), endElement(), characters()). ABER ICH MÖCHTE DIESE EREIGNIS HANDLER CALLING OHNE STACK VERWENDEN. Gibt es eine einfache Methode, um dies in C# zu erreichen?
Verwenden Sie eine Statusmaschine anstelle eines Stapels. –
Ich habe keine Ahnung auf Zustandsmaschine. Können Sie uns bitte etwas näher erläutern oder einen nützlichen Link für das gleiche bereitstellen? Beim Parsen des XML-Dokuments muss ich nur den Anfang eines Tags identifizieren (und den Ereignishandler startElement() aufrufen), den Inhalt des Tags identifizieren (und den Ereignishandler Text() aufrufen), das Ende eines Tags identifizieren (und endElement aufrufen)() Event Handler). Gibt es eine Möglichkeit, dies zu erreichen, ohne einen Stapel zu verwenden. – codeLover