Редактирование XML-файла на C#; SelectSingleNode возвращает ноль

Я пытаюсь найти существующий контент в файле XML и изменить его, используя команду SelectSingleNode. Однако все, что я получаю, это исключение NullReferenceException. Может быть, я просто не понимаю, как путь к файлу работает с этой конкретной командой, но я пробовал много вариантов, которые нашел в Интернете, но безрезультатно. Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

Вот сценарий.

public void saveStuff()
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@"Worlds\WorldData.xml"); //loads the file just fine

    XmlNode node = xmlDoc.SelectSingleNode("//World[@ID='002']/Name"); //node = null
    node.Value = "New Name"; //NullReferenceException was unhandled
    xmlDoc.Save(@"Worlds\example.xml");
}

А вот пример моего XML-файла.

<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
  <World ID="001">
    <Name>
      TinyWorld
    </Name>
    <Size>
      4x4
    </Size>
    <Tiles>
      000,000,000,001,
      000,000,000,001,
      001,001,004,001,
      001,001,001,001,
    </Tiles>
  </World>
  <World ID="002">
    <Name>
      MicroWorld
    </Name>
    <Size>
       2x2
    </Size>
    <Tiles>
      000,000,
      001,001,
     </Tiles>
  </World>
</XnaContent>

person user1770080    schedule 06.06.2013    source источник


Ответы (1)


Вместо:

public void saveStuff()
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@"Worlds\WorldData.xml");

    XmlElement root = xmlDoc.DocumentElement;
    XmlNode node = root.SelectSingleNode("//World[@ID='002']/Name");
    node.Value = "New Name";
    xmlDoc.Save(@"Worlds\example.xml");
}

Вы выбирали, используя // xpath, но в тот момент контекста не было. Этот синтаксис относится к текущему узлу.

person DonBoitnott    schedule 06.06.2013