Het verwijderen van knooppunten van een XmlDocument

De volgende code moet op zoek naar de juiste project-tag en verwijder het van het XmlDocument, maar als ik hem test, het zegt:

Het knooppunt te worden verwijderd, niet een kind van dit knooppunt.

Weet iemand de juiste manier om dit te doen?

public void DeleteProject (string projectName)
{
    string ccConfigPath = ConfigurationManager.AppSettings["ConfigPath"];

    XmlDocument configDoc = new XmlDocument();

    configDoc.Load(ccConfigPath);

    XmlNodeList projectNodes = configDoc.GetElementsByTagName("project");

    for (int i = 0; i < projectNodes.Count; i++)
    {
        if (projectNodes[i].Attributes["name"] != null)
        {
            if (projectName == projectNodes[i].Attributes["name"].InnerText)
            {                                                
                configDoc.RemoveChild(projectNodes[i]);
                configDoc.Save(ccConfigPath);
            }
        }
    }
}

UPDATE

Vast. Ik deed twee dingen:

XmlNode project = configDoc.SelectSingleNode("//project[@name='" + projectName + "']");

Vervangen van de For-lus met een XPath-query, maar dat was niet voor de vaststelling van het, gewoon omdat het een betere benadering.

De werkelijke oplossing was:

project.ParentNode.RemoveChild(project);

Bedankt Pat en Chuck voor deze suggestie.

  • Ik was op zoek naar dit ding. Ik heb een halve dag op zoek naar xml dingen op het internet en een halve minuut op DUS. Nog een andere reden waarom Jeff en Joel waren naar iets.
InformationsquelleAutor FlySwat | 2008-08-21



6 Replies
  1. 64

    In plaats van

    configDoc.RemoveChild(projectNodes[i]);

    proberen

    projectNodes[i].parentNode.RemoveChild(projectNodes[i]);
  2. 2

    Eruit ziet, moet u het bovenliggende knooppunt van projectNodes[i] voordat u belt RemoveChild.

  3. 1

    Is het mogelijk dat het project knooppunten niet onderliggende knooppunten, maar kleinkinderen of lager? GetElementsByTagName geeft je elementen van overal in de onderliggende element boom, IIRC.

  4. 0

    Wanneer je voldoende geïrriteerd door het schrijven van de lange weg (dat was voor mij al vrij snel) kunt u gebruik maken van een helper uitbreiding methode die hieronder. Yay nieuwe technologie!

    public static class Extensions {
        ...
        public static XmlNode RemoveFromParent(this XmlNode node) {
            return (node == null) ? null : node.ParentNode.RemoveChild(node);
        }
    }
    ...
    //some_long_node_expression.parentNode.RemoveChild(some_long_node_expression);
    some_long_node_expression.RemoveFromParent();
  5. 0

    Het zou handig zijn om een voorbeeld te zien van het XML-bestand dat u de verwerking maar mijn gok zou zijn dat je iets als dit

    <Root>
     <Blah>
       <project>...</project>
     </Blah>
    </Root>

    De foutmelding lijkt te worden, omdat u probeert te verwijderen <project> van de grootouder in plaats van het rechtstreeks bovenliggende element van het project knooppunt

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *