/// <summary> /// Parse the DataObjectFormat and CommitmentTypeIndication properties for this document id /// </summary> /// <param name="element"></param> /// <param name="nsm"></param> internal void ParseProperties(XmlElement element, XmlNamespaceManager nsm) { // data object format XmlElement objectFormat = element.SelectSingleNode($"xades:SignedDataObjectProperties/xades:DataObjectFormat[@ObjectReference='#{Id}']", nsm) as XmlElement; if (objectFormat != null) { Description = objectFormat["Description", Xades.XadesNamespaceUrl]?.InnerText; ObjectIdentifier = ObjectIdentifier.TryParseFromParent(objectFormat); MimeType = objectFormat["MimeType", Xades.XadesNamespaceUrl]?.InnerText; Encoding = objectFormat["Encoding", Xades.XadesNamespaceUrl]?.InnerText; } // commitment type indication XmlElement commitmentTypeIndication = element.SelectSingleNode($"xades:SignedDataObjectProperties/xades:CommitmentTypeIndication[xades:ObjectReference='#{Id}']", nsm) as XmlElement; if (commitmentTypeIndication != null) { CommitmentTypeId = ObjectIdentifier.TryParseFromParent(commitmentTypeIndication, "CommitmentTypeId", Xades.XadesNamespaceUrl); XmlElement commitmentTypeQualifiers = commitmentTypeIndication["COmmitmentTypeQualifiers", Xades.XadesNamespaceUrl]; if (commitmentTypeQualifiers != null) { foreach (XmlElement commitmentTypeQualifier in commitmentTypeQualifiers.GetElementsByTagName("CommitmentTypeQualifier", Xades.XadesNamespaceUrl)) { CommitmentTypeQualifiers.Add(commitmentTypeQualifier); } } } }
/// <summary> /// Create <CommitmentTypeIndication> for this item /// </summary> /// <param name="document"></param> /// <returns></returns> internal XmlElement AddCommitmentTypeIndication(XmlElement signedDataObjectProperties) { XmlElement commitmentIdentifier = CommitmentTypeId?.GetObjectIdentifier(signedDataObjectProperties.OwnerDocument, "CommitmentTypeId", Xades.XadesNamespaceUrl); if (commitmentIdentifier == null) { return(null); } XmlElement commitmentTypeIndication = signedDataObjectProperties.CreateChild("CommitmentTypeIndication", Xades.XadesNamespaceUrl); commitmentTypeIndication.AppendChild(commitmentIdentifier); commitmentTypeIndication.CreateChild("ObjectReference", Xades.XadesNamespaceUrl, $"#{Id}"); if (CommitmentTypeQualifiers != null && CommitmentTypeQualifiers.Count > 0) { XmlElement commitmentTypeQualifiers = commitmentTypeIndication.CreateChild("CommitmentTypeQualifiers", Xades.XadesNamespaceUrl); foreach (XmlElement commitmentTypeQualifier in CommitmentTypeQualifiers.Where(x => x.LocalName == "CommitmentTypeQualifier" && x.NamespaceURI == Xades.XadesNamespaceUrl)) { commitmentTypeQualifiers.AppendChild(signedDataObjectProperties.OwnerDocument.ImportNode(commitmentTypeQualifier, true)); } } return(commitmentTypeIndication); }