Изменить один атрибут XML в C # - PullRequest
4 голосов
/ 11 июля 2010

У меня хорошо написано XML-документ, и это будет выглядеть примерно так

<Team>
  <Character Name="Bob" Class="Mage"/>
  <Character Name="Mike" Class="Knight"/>
</Team>

Я пытаюсь найти способ получить доступ к атрибуту "Class" одного символа и изменитьЭто.До сих пор я дошел до того, что могу точно указать определенный символ, но не могу понять, как получить доступ к атрибуту «Класс» и изменить его для символа.

void Write(string path, string charName, string varToChange, string value){

    XmlNode curNode = null;
    XmlDocument doc = new XmlDocument();
    doc.Load(path);

    XmlElement rootDoc = doc.DocumentElement;
    curNode = rootDoc;

    if(curNode.HasChildNodes){

        for(int i=0; i<curNode.ChildNodes.Count; i++){

            if(charName == curNode.ChildNodes[i].Attributes.GetNamedItem("Name").Value){

                // Code would go here
            }
        }
    }
    return;
}

Ответы [ 2 ]

4 голосов
/ 11 июля 2010

Использовать XPATH:

XmlDocument doc = new XmlDocument();
doc.Load(path);

var nodes = doc.SelectNodes(String.Format("/Team/Character[@Name=\"{0}\"]", charName));

foreach (XmlElement n in nodes)
{
    n.SetAttribute(varToChange, value);
}
3 голосов
/ 11 июля 2010

Используйте метод XmlElement.SetAttribute («атрибут для изменения», «значение, чтобы установить его»)

редактирование: Я только что заметил, что вы используете XMLNode вместо XMLElement, поэтому для обновления атрибута вы можете просто привести XmlNode к XmlElement, например так:

XmlElement el = (XmlElement)curNode;
el.SetAttribute("Class", "Value");

В противном случае вы можете создать атрибут и затем добавить его для обновления атрибута:

XmlAttribute attrib =
curNode.OwnerDocument.CreateAttribute("Class");
attrib.Value = "Value";
curNode.Attributes.Append(attrib);

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...