Проблема в данном случае достаточно трививальная: код сваливается на строке "doc.InnerXml = xmlData", по причине некорректно отформатированной XML-строки. Более конкретно причину ошибки можно узнать, если заключить этот фрагмент кода в try...catch и просмотреть текст исключения:
Цитата | The '1' character, hexadecimal value 0x31, cannot begin with a name. Line 1, position 47. |
XML-тэги не могут начинаться с цифры и не могут содержать символ "#". Далее, если исправить эти ошибки в XML-коде, то вылетает исключение в getData():
Цитата | The expression passed to this method should result in a NodeSet. |
Это исключение вылетает из-за того, что в коде выполняется попытка получить XML-тэг по XPath-пути "100/a". Тэг "100" не может существовать по вышеописанным причинам.
Окончательный, откорректированный и рабочий вариант программы:
Код | using System; using System.IO; using System.Xml; using System.Xml.XPath;
namespace ConsoleApplication5 { /// <summary> /// Summary description for Class1. /// </summary> class Class1 { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { start(); }
static void start() { XmlDocument doc = new XmlDocument();
String xmlData = "<data>" + "<a100>" + "<n0>" + "<a>Алексеев В.А.</a>" + "</n0>" + "</a100>" + "<x245>" + "<n0>" + "<a>Иллюзии и догмы</a>" + "<b>Взаимоотношения Советского государства и религии</b>" + "</n0>" + "</x245>" + "</data>";
doc.InnerXml = xmlData; XPathNavigator nav = doc.CreateNavigator(); Console.WriteLine(getData(nav,"descendant::a100/a")); }
static string getData(XPathNavigator nav, String path ) { Convert.ToString(path); XPathNodeIterator myIterator = nav.Select(path); myIterator.MoveNext(); return myIterator.Current.Value; } } } |
P.S. проверить корректность любого XML-документа можно довольно простым способом: создав текстовый файл с XML-содержимым и сохранив его под расширением .xml, а затем открыв в Internet Explorer-е. При наличии ошибок, браузер покажет строку, содержащую ошибку и укажет причину ошибки. |