1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Fehler bei löschen von Knoten!

Dieses Thema im Forum "XML Technologien" wurde erstellt von DerAskTyp, 10. Oktober 2016.

  1. DerAskTyp

    DerAskTyp Mitglied

    upload_2016-10-10_20-2-41.png

    Wenn ich versuche den Knoten zu löschen kommt der Fehler : The Node to be removed is not a Child of this node.
    Ich erkenne aber den Fehler leider nicht.


    Code (C#):
    1. using System;
    2. using System.Collections.Generic;
    3. using System.IO;
    4. using System.Linq;
    5. using System.Text;
    6. using System.Threading.Tasks;
    7. using System.Xml;
    8.  
    9. namespace codeWatcherConsoleVersion01
    10. {
    11.     class Program
    12.     {
    13.         static void Main(string[] args)
    14.         {
    15.             XmlDocument doc = new XmlDocument();
    16.             doc.Load("XMLFile1.xml");
    17.             List<string> allPupils = File.ReadAllLines("PupilNames.csv").ToList();
    18.             string placeholder = "repeating";
    19.             XmlNodeList allElem = getElement(doc, "ul"); //Ich kriege hier alle uls heraus Falls es mehrere uls an verschiedenen Stellen gibt, die nicht wiederholt werden müssen setze...
    20.             XmlNode repeatData; //ich mir ein "Node" welches später das richtige ul besitzt (welches wiederholt wird)....
    21.             XmlElement templateData = doc.DocumentElement;
    22.  
    23.             repeatData = findRepeatElement(allElem,placeholder,"pupil");
    24.             templateData.RemoveChild(repeatData);  //HIER TRITT DER BUG AUF
    25.         }    
    26.  
    27.         #region Private Methods  
    28.         private static XmlNode findRepeatElement(XmlNodeList allElem,string searchAttribute,string searchAttrValue)
    29.         {
    30.             XmlNode repeatNode = null;
    31.             int listenIdx = 0;          
    32.             while (listenIdx < allElem.Count && repeatNode == null)
    33.             {
    34.                 if (checkAttribute(allElem[listenIdx], searchAttribute))
    35.                 {
    36.                     if (allElem[listenIdx].Attributes[searchAttribute].Value == searchAttrValue)
    37.                     {
    38.                         repeatNode = allElem[listenIdx];
    39.                     }
    40.                 }
    41.                 listenIdx++;
    42.             }
    43.  
    44.             if (repeatNode == null)
    45.                 throw new Exception("Es wurde kein Element gefunden, welches widerholt werden muss!");
    46.  
    47.             return repeatNode;
    48.         }
    49.  
    50.         private static bool checkAttribute(XmlNode element, string attributeName)
    51.         {
    52.             if (element.Attributes[attributeName] == null)
    53.                 return false;
    54.             else
    55.                 return true;
    56.         }
    57.  
    58.         private static XmlNodeList getElement(XmlDocument doc, string xmlElementName)
    59.         {
    60.             if(doc.GetElementsByTagName(xmlElementName).Count == 0)
    61.             {
    62.                 throw new Exception("Element not found!");
    63.             }
    64.             return doc.GetElementsByTagName(xmlElementName);
    65.  
    66.         }
    67.  
    68.         private static bool checkIfSameAttrValue(XmlNodeList allElem,int listIdx, string searchAttribute,string searchAttrValue)
    69.         {
    70.             if (allElem[listIdx].Attributes[searchAttribute].Value != searchAttrValue)
    71.                 return false;
    72.             else
    73.                 return true;
    74.            
    75.         }
    76.      
    77.      
    78.         #endregion
    79.     }
    80. }
     
  2. melmager

    melmager Erfahrenes Mitglied

    Ohne nun tief in den Code einzusteigen:
    Du merkst dir ja den zu löschenden Node - also erst mit getParentNode das Elternteil ermitteln
    und dann löschen

    Code (Text):
    1. repeatData = findRepeatElement(allElem,placeholder,"pupil");
    2. XmlNode pn = repeatData.getParentNode();
    3. pn.RemoveChild(repeatData);
     
Die Seite wird geladen...