2016-01-30 2 views
2

Я извлекающий элемент из XML-документа, но это возвращение NullКак Извлечение элемента с помощью XPathSelectElement

<?xml version="1.0" encoding="utf-8"?> 
<Test1 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-test" 
    xmlns="https://www.google.com/partner/testt.xsd"> 

    <Test2>OK</Test2> 
    <Test3>1439379003</Test3> 
</Test1> 

Am пытается извлечь TEST2 элемент, но его возвращение NULL

var responseXdoc = XDocument.Parse(response); 
var statusElement = responseXdoc.XPathSelectElement("/Test1/Test2"); 

результат statusElement, как null, но я ожидаю, что Ok

Проблема в пространстве имен

xmlns: xsd = "http://www.w3.org/2001/XMLSchema" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "https: // www. google.com/partner/testt.xsd (Его догадка)

ответ

3

Ваш XML имеет пространство имен по умолчанию, которые элементы в области наследуют неявно. Для ссылки на элементы в пространстве имен с использованием XPath, необходимо использовать префикс пространства имен, которые вам необходимо зарегистрироваться, прежде чем в XmlNamespaceManager:

var nsManager = new XmlNamespaceManager(new NameTable()); 

nsManager.AddNamespace("d", "https://www.insuranceleads.com/partner/PricePresentationResult.xsd"); 

var statusElement = responseXdoc.XPathSelectElement("/d:Test1/d:Test2", nsManager); 

dotnetfiddle demo

В качестве альтернативы, вы можете использовать XNamespace и LINQ API сделать то же самое, например:

XNamespace d = "https://www.insuranceleads.com/partner/PricePresentationResult.xsd"; 
var statusElement = responseXdoc.Element(d + "Test1").Element(d + "Test2"); 
+0

Я получил благодарность @MarkusSafar – JAB

Смежные вопросы