как использовать XPath с XDocument?

Существует аналогичный вопрос, но, похоже, решение не получилось в моем случае: Weirdness с XDocument, XPath и пространствами имен

Вот XML, с которым я работаю:

   Demo Report Unit Test   

И ниже – код, который я думал, что он должен работать, но это не …

 XDocument xdoc = XDocument.Load(@"C:\SampleXML.xml"); XmlNamespaceManager xnm = new XmlNamespaceManager(new NameTable()); xnm.AddNamespace(String.Empty, "http://demo.com/2011/demo-schema"); Console.WriteLine(xdoc.XPathSelectElement("/Report/ReportInfo/Name", xnm) == null); 

У кого-нибудь есть идеи? Благодарю.

Если у вас XDocument, проще использовать LINQ-to-XML:

 var document = XDocument.Load(fileName); var name = document.Descendants(XName.Get("Name", @"http://demo.com/2011/demo-schema")).First().Value; 

Если вы уверены, что XPath – это единственное решение, которое вам нужно:

 using System.Xml.XPath; var document = XDocument.Load(fileName); var namespaceManager = new XmlNamespaceManager(new NameTable()); namespaceManager.AddNamespace("empty", "http://demo.com/2011/demo-schema"); var name = document.XPathSelectElement("/empty:Report/empty:ReportInfo/empty:Name", namespaceManager).Value; 

XPath 1.0, который реализует MS, не имеет представления о пространстве имен по умолчанию. Поэтому попробуйте следующее:

 XDocument xdoc = XDocument.Load(@"C:\SampleXML.xml"); XmlNamespaceManager xnm = new XmlNamespaceManager(new NameTable()); xnm.AddNamespace("x", "http://demo.com/2011/demo-schema"); Console.WriteLine(xdoc.XPathSelectElement("/x:Report/x:ReportInfo/x:Name", xnm) == null); 
  • Selenium WebDriver: нажатие на элементы в SVG с использованием XPath
  • Xml-SelectNodes с пространством имен по умолчанию через XmlNamespaceManager не работает как ожидалось
  • Selenium WebDriver : как нажимать на элементы в SVG с помощью XPath
  • Есть ли в XPath инструкция if if-else?
  • Создать / получить xpath из узла XML java
  • Как получить текст элемента внутри разметки CDATA через XPath?
  • Как определить повторяющиеся значения в числовой последовательности с помощью XPath 2.0?
  • Xpath «заканчивается-с» не работает
  • XPath: выберите первый элемент с определенным атрибутом
  • xpath найти, если узел существует
  • Как преобразовать строку в верхний или нижний регистр с помощью XSLT?
  • Давайте будем гением компьютера.