У меня есть следующий XML-файл с именем file.xml:Выбор внутреннего текста узлов XML и добавить в список
<?xml version="1.0"?>
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config">
<defaults>
<serializer>pof</serializer>
</defaults>
<caching-scheme-mapping>
<cache-mapping>
<cache-name>broadcast-data|position</cache-name>
<scheme-name>broadcast</scheme-name>
</cache-mapping>
<cache-mapping>
<cache-name>broadcast-data|position-audit</cache-name>
<scheme-name>broadcast-remote</scheme-name>
</cache-mapping>
<cache-mapping>
<cache-name>broadcast-data|trade</cache-name>
<scheme-name>broadcast-remote</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
</cache-config>
Я пытаюсь получить внутренний текст всех имен кэш-памяти, которые существуют в рамках каждого cache-mapping node и поместить их в список. Для этого у меня есть класс Model.cs.
class Model
{
private XmlDocument cacheFile = new XmlDocument();
private List<string> cacheNames = new List<string>();
private int nameCount = 0;
public Model()
{
this.loadNames();
}
public void loadNames()
{
try //exception handling
{
cacheFile.Load("../../resources/file.xml");
}
catch (System.IO.FileNotFoundException)
{
Debug.WriteLine("File not found!");
Environment.Exit(1);
}
catch (System.ArgumentException)
{
Debug.WriteLine("Invalid path!");
Environment.Exit(1);
}
catch (Exception e)
{
Debug.WriteLine("Exception thrown!");
Debug.WriteLine(e);
Environment.Exit(1);
}
//get cache names
XmlNodeList nodes = cacheFile.SelectNodes("/cache-config/caching-scheme-mapping/cache-mapping");
foreach (XmlNode node in nodes)
{
string name = node.FirstChild.InnerText;
cacheNames.Add(name);
nameCount++;
}
}
//accessors
public List<string> getCacheNames()
{
return cacheNames;
}
public int getNameCount()
{
return nameCount;
}
}
Однако каждый раз, когда я создаю объект модели, а затем проверить, если список был загружен, он говорит мне, что список пуст! Кажется, что цикл foreach никогда не запускается, или как будто программа не может найти узлы, которые я указываю. Пожалуйста помоги.
По какой-либо причине вы должны использовать 'XmlDocument' вместо LINQ to XML? Последнее, как правило, гораздо приятнее в использовании ... –
Вы должны пройти через него с помощью отладчика. Я собираюсь опасаться, что ваш список 'nodes' пуст, поскольку вы игнорируете пространство имен ваших элементов. Как поясняет @JonSkeet, «XDocument» было бы намного легче работать с этим. –
@JonSkeet Я новичок в .NET, поэтому я просто следил за некоторой документацией MSDN, которая использовала 'XmlDocument' –