2013-03-26 10 views
2

Как получить значение элемента sitename из приведенного ниже xml?Как получить значение элемента из xml с помощью xpath?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:63630/Service.svc</To> 
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/GetDemographic</Action> 
    </s:Header> 
    <s:Body> 
    <GetDemographic xmlns="http://tempuri.org/"> 
     <userIdentifier>first value</userIdentifier> 
     <sitename>second value</sitename> 
     <demographicName>third value</demographicName> 
    </GetDemographic> 
    </s:Body> 
</s:Envelope> 

Код ниже я попытался вернулся нуль:

var xmlDocument = new XmlDocument(); 
xmlDocument.LoadXml(myXml); 
var result = xmlDocument.SelectNodes("//sitename"); 

ли проблема XML-пространство имен? Могу ли я искать независимо от значений пространства имен, поскольку элемент sitename не имеет пространства имен, назначенного ему?

Я нашел ниже код, который работает отлично:

xmlDocument.SelectNodes("//*[local-name()='sitename']"); 

Как сделать это без учета регистра?

+0

'' // s: Envelope/s: Body/GetDemographic/sitename "' ?? – Nolonar

+0

Я бы хотел, чтобы он был общим –

ответ

0

Попробуйте посмотреть эти ссылки;)

без учета регистра XPath в .NET: http://blogs.msdn.com/shjin/archive/2005/07/22/442025.aspx

Использование XPath Выполнение регистронезависимом Поиск с MSXML: http://support.microsoft.com/kb/315719

Например:

XMLDoc.SelectNodes("Cars/car[contains(.,'Protan')]") 

результат вышеуказанного select должен быть равен результатам этого выбора

XMLDoc.SelectNodes("Cars/car[contains(.,'protan')]")' 
0

У меня была аналогичная проблема. Я смог решить это, добавив пространство имен, используя диспетчер пространств имен.

Вот подобный Q/A: (Using Xpath With Default Namespace in C#)

Надежда, что помогает.

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