2016-02-24 2 views
0

Из следующего XML:Выберите один узел

<response> 
    <content> 
     <Result xmlns="http://www.test.com/nav/webservices/types"> 
      <Name>Test</Name> 
     </Result> 
    </content> 
    <status>ok</status> 
</response> 

Я пытаюсь получить значение имени элемента следующим образом, но это не работает:

private static void Main() 
{ 
    var response = new XmlDocument(); 
    response.Load("Response.xml"); 
    var namespaceManager = new XmlNamespaceManager(response.NameTable); 
    namespaceManager.AddNamespace("ns", "http://www.test.com/nav/webservices/types"); 

    Console.WriteLine(response.SelectSingleNode("/response/content/Result/Name", namespaceManager).InnerXml); 
} 

Как я могу выбрать Элемент имени?

+0

Кстати, в 2016 году, вы должны использовать 'XDocument' и Linq2Xml ... –

ответ

1

Ваш код работал бы только fineif в Xml определили пространство имен с префикс "ns:".

Но в этом случае пространство имен задается без префикса, который задает пространство имен по умолчанию для всего, что находится в теге Результат: «.../webservice/types».

Чтобы это отразить, вам необходимо изменить Xpath и сообщить XmlDocument, что узлы, которые вы ищете в Resultare, в пространстве имен webservice/types. Таким образом, ваш запрос будет выглядеть следующим образом:

Console.WriteLine(response.SelectSingleNode(@"/response/content/ns:Result/ns:Name", namespaceManager).InnerXml); 
0

Для получения непосредственно текстовое значение узла существует text() функция, если он используется в запросе он будет выглядеть так:

/response/content/Result/Name/text() 
0

Попробуйте это:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.InnerXml = "<response><content><Result xmlns=\"http://www.test.com/nav/webservices/types\"><Name>Test</Name></Result></content><status>ok</status>"; 
string elementValue = String.Empty; 

if (xmlDoc != null) 
{ 
    xNode = xmlDoc.SelectSingleNode("/Result"); 
    xNodeList = xNode.ChildNodes; 
    foreach (XmlNode node in xNodeList) 
    { 
     elementValue = node.InnerText; 
    } 
} 
Смежные вопросы