Выбор узла XML

Я делаю очень простое дело. Я пытаюсь получить узел из небольшого файла XML.

 <?xml version="1.0"  encoding="UTF-8" ?>
<SAMLConfiguration xmlns="urn:componentspace:SAML:2.0:configuration">
  <IdentityProvider Name="IdpNameInSPForIsuer"
                    Description="SecureAuth"
                    LocalCertificateFile=""
                    LocalCertificatePassword=""/>

  <ServiceProviderProfiles>
    <ServiceProvider NameIdentifier ="SPIssuerName"
                     ExpectsSignatureVerification="true"
                     ExpectsSignedResponse="false"
                     Certificate="sharedpubliccsert.cer"
                     DigestMethod="SAMLIdentifiers.DigestMethods.SHA1"
                     SignatureMethod="SAMLIdentifiers.SignatureMethods.RSA_SHA1"
                     SingleLogoutServiceUrl="https://serviceprovider/slo"
                         SendResponseBy="HTTP-Redirect" />

  </ServiceProviderProfiles>
</SAMLConfiguration>

Я пытаюсь получить ServiceProvider. Ниже приведен код C #, который у меня есть:

строка parent = "ServiceProviderProfiles"; строка children = "ServiceProvider";

var nodePath = string.Concat (@ "//", родитель, @ "/", дети);
var xmlNode = xmlDocument.SelectSingleNode (nodePath);

Когда я отлаживаю, xmlNode имеет значение null. Какие проблемы с моим кодом приводят к нулевому значению xmlNode?


person TheFootClan    schedule 07.09.2017    source источник
comment
Вам необходимо использовать поиск с использованием пространства имен по умолчанию xmlns="urn:componentspace:SAML:2.0:configuration", как показано в Использование Xpath с пространством имен по умолчанию в C # и XmlDocument.SelectSingleNode и проблема xmlNamespace и SelectSingleNode, возвращающая значение null для заведомо хорошей xml путь к узлу с использованием XPath.   -  person dbc    schedule 08.09.2017
comment
Пример скрипки с использованием Использование Xpath с пространством имен по умолчанию в C #.   -  person dbc    schedule 08.09.2017


Ответы (1)


Это можно сделать разными способами.

Вот пример кода

 // xmlns attribute from the root
 XNamespace ns = "urn:componentspace:SAML:2.0:configuration";
 // read XML file into XmlDocument
 XDocument doc = XDocument.Load("file.xml");
 // Select XML descendants  with Linq
 var result = doc.Descendants(ns + "SAMLConfiguration").Descendants().Where(c => c.Name.LocalName.ToString() == "ServiceProvider")
           .ToArray();
person Community    schedule 08.09.2017
comment
ответ обновлен - person ; 08.09.2017
comment
Здорово! Спасибо за ваше сообщение. Удачного кодирования! - person Balagurunathan Marimuthu; 08.09.2017