protected virtual XacmlContextAttributeValue ReadContextAttributeValue(XmlReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (!reader.IsStartElement(XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext)) { throw ThrowHelperXml(reader, "XML message is not valid."); } XacmlContextAttributeValue result = new XacmlContextAttributeValue(); if (reader.IsEmptyElement) { reader.Read(); return(result); } reader.ReadStartElement(XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext); // Read elements // result.Value = reader.ReadInnerXml() // TODO: result.Value = reader.ReadContentAsString(); // JG: reader.ReadEndElement(); return(result); }
protected virtual void WriteContextAttributeValue(XmlWriter writer, XacmlContextAttributeValue xacmlContextAttributeValue) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } if (xacmlContextAttributeValue == null) { throw new ArgumentNullException(nameof(xacmlContextAttributeValue)); } writer.WriteStartElement(XacmlConstants.Prefixes.Context, XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext); // UNDONE AnyAttribute writer.WriteRaw(xacmlContextAttributeValue.Value); writer.WriteEndElement(); }
protected virtual XacmlContextAttribute ReadContextAttribute(XmlReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (!reader.IsStartElement(XacmlConstants.ElementNames.Attribute, this.Version.NamespaceContext)) { throw ThrowHelperXml(reader, "XML message is not valid."); } // Read attributes Uri attributeId = this.ReadAttribute <Uri>(reader, XacmlConstants.AttributeNames.AttributeId, isRequered: true); Uri dataType = this.ReadAttribute <Uri>(reader, XacmlConstants.AttributeNames.DataType, isRequered: true); string issuer = this.ReadAttribute <string>(reader, XacmlConstants.AttributeNames.Issuer, isRequered: false); DateTime?issueInstant = null; string issueInstantString = this.ReadAttribute <string>(reader, XacmlConstants.AttributeNames.IssueInstant, isRequered: false); if (!string.IsNullOrWhiteSpace(issueInstantString)) { issueInstant = XmlConvert.ToDateTime(issueInstantString, XmlDateTimeSerializationMode.Local); } reader.ReadStartElement(XacmlConstants.ElementNames.Attribute, this.Version.NamespaceContext); // Read elements XacmlContextAttributeValue attrVal = this.ReadRequired(XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext, this.ReadContextAttributeValue, reader); XacmlContextAttribute result = new XacmlContextAttribute(attributeId, dataType, attrVal) { Issuer = issuer, IssueInstant = issueInstant, }; reader.ReadEndElement(); return(result); }