C # Загрузка XML-файла и чтение его для поиска узла

#c# #xml #load

#c# #xml #загрузка

Вопрос:

Я пытаюсь создать веб-службу, которая считывает XML-файл и выполняет поиск узла. Но каждый раз, когда я получаю сообщение об ошибке, в котором говорится return base.Channel.MymethodName(username);

 XmlDocument doc = new XmlDocument();
doc.Load("C:\CustomerDatabase.xml");
XmlNode root = doc.DocumentElement;
string searchpath = "//CustomerInformation[CustomerName'"   name   "']";
XmlNode userNode = root.SelectSingleNode(searchpath);
  

Если я заблокирую эту часть кода, все остальное будет работать, поэтому я думаю, что я делаю это неправильно. Я прочитал все сообщения, которые я могу здесь, и все еще не повезло с проблемами. Есть предложения или помощь?

Обновить:

Мой XML-файл выглядит следующим образом

 <CustomerInfo>
<CustomerInformation>
  <name>JohnDoe</name>
</CustomerInformation>
</CustomerInfo>
  

Я начал комментировать каждую строку своего кода, и я думаю, что это одна из проблем

 XmlNode userNode = root.SelectSingleNode(searchpath);
  

есть идеи, как я могу это исправить

2-е редактирование: я пытаюсь открыть файл, чтобы увидеть, есть ли введенное имя в XML-файле. таким образом, в значительной степени человек вводит JohnDoe, если он существует, он отправляет строку, в которой говорится, что person уже существует.

Комментарии:

1. каково внутреннее исключение ошибки?

2. Если у вас есть Fx3 или более поздняя версия, тогда XDocument будет проще и быстрее. Но очень сложно сопоставить этот код с ошибкой. (Как) вы тестируете userNode для null ?

3. Разве вы не можете выполнить отладку через код, чтобы найти, какой оператор точно выдал исключение, и узнать, какое исключение было выдано? Ваша ошибка не кажется очень информативной..

4. Вы не сказали, как выглядит ваш XML или что вы пытаетесь сделать с ним впоследствии. Как предполагает Хенк, LINQ to XML было бы значительно проще, но вы действительно должны выяснить, что происходит не так, с помощью исключения, прежде чем делать что-либо еще.

Ответ №1:

Попробуйте,

  string searchpath = "//CustomerInformation[name='JohnDoe']";
  

Или используйте Linq-XML.

 var result = (from ele in XDocument.Load(@"c:CustomerDatabase.xml").Descendants("CustomerInformation")
                    where ((string)ele.Element("name")) == "JohnDoe"
                    select ele).FirstOrDefault();
if(result!=null)
   {
    //
   }
  

Ответ №2:

Ваш XPath выглядит странно для меня. Я бы посоветовал посмотреть здесь: http://www.w3schools.com/xpath/xpath_syntax.asp

Возможно, это сработало бы лучше:

 string searchpath = "//CustomerInformation[@CustomerName='"   name   "']"; 
  

Как говорили другие, можете ли вы предоставить внутреннее исключение и какая строка выдает ошибку?

Ответ №3:

 string searchpath = "//CustomerInformation[./name='"   name   "']";