#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 "']";