/// <summary> /// /// </summary> /// <param name="document"></param> /// <param name="idValue"></param> /// <returns></returns> public override XmlElement GetIdElement(XmlDocument document, string idValue) { XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable); XmlElement element = null; if (string.IsNullOrEmpty(idValue) == false) { string prefix = SoapDSigUtil.FindPrefix(document.DocumentElement, this.NamespaceForReference); if (string.IsNullOrEmpty(prefix)) { prefix = "wsu"; } nsmgr.AddNamespace(prefix, this.NamespaceForReference); string findString = string.Format("//*[(@Id='{0}' and namespace-uri()='{1}') or (@{2}:Id='{0}')]", idValue, this.NamespaceForReference, prefix); element = document.SelectSingleNode(findString, nsmgr) as XmlElement; } else if (document.DocumentElement != null) { element = document.DocumentElement; } return(element); }
/// <summary> /// Метод нахождения префикса /// </summary> /// <param name="element"></param> /// <param name="isTypeBasic"></param> /// <returns></returns> private string FindPrefix(XmlElement element, bool isTypeBasic) { try { log.LogDebug("Пытаемся получить значение префикса."); string prefix = SoapDSigUtil.FindPrefix(element, NamespaceUri.Smev3Types); if (!isTypeBasic) { prefix = (string.Compare(prefix, "xmlns", StringComparison.InvariantCultureIgnoreCase) == 0) ? string.Empty : prefix; } else { prefix = (string.IsNullOrEmpty(prefix) || string.Compare(prefix, "xmlns", true) == 0) ? "typesBasic" : prefix; } log.LogDebug($"Значение префикса успешно получено: {prefix}."); return(prefix); } catch (Exception ex) { throw new Exception($"Ошибка при попытке получить значение префикса. {ex.Message}."); } }