Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private MemoryStream ProcessMemoryStream(Stream inputStream, bool dispose)
- {
- StreamWriter xmlStream = null;
- var outputStream = new MemoryStream();
- bool continueFilter = false;
- try
- {
- xmlStream = new StreamWriter(outputStream);
- using (var reader = XmlReader.Create(inputStream))
- {
- using (
- var writer = XmlWriter.Create(xmlStream,
- new XmlWriterSettings() {ConformanceLevel = ConformanceLevel.Auto}))
- {
- while (reader.Read())
- {
- if (reader.LocalName.Equals("SignatureConfirmation") &&
- reader.NamespaceURI.Equals(
- "http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"))
- {
- if (!reader.IsEmptyElement) continueFilter = reader.IsStartElement();
- }
- else if (reader.LocalName.Equals("Signature") &&
- reader.NamespaceURI.Equals("http://www.w3.org/2000/09/xmldsig#"))
- {
- if (!reader.IsEmptyElement) continueFilter = reader.IsStartElement();
- }
- else if (continueFilter)
- {
- // continue to next node
- }
- else
- XmlHelper.WriteShallowNode(reader, writer);
- }
- writer.Flush();
- }
- reader.Close();
- }
- outputStream.Position = 0;
- return outputStream;
- }
- catch (Exception ex)
- {
- // handle error
- throw;
- }
- finally
- {
- if (xmlStream != null && dispose) xmlStream.Dispose();
- }
- }
- internal static class XmlHelper
- {
- internal static void WriteShallowNode(XmlReader reader, XmlWriter writer)
- {
- if (reader == null)
- {
- throw new ArgumentNullException("reader");
- }
- if (writer == null)
- {
- throw new ArgumentNullException("writer");
- }
- switch (reader.NodeType)
- {
- case XmlNodeType.Element:
- writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
- writer.WriteAttributes(reader, true);
- if (reader.IsEmptyElement)
- {
- writer.WriteEndElement();
- }
- break;
- case XmlNodeType.Text:
- writer.WriteString(reader.Value);
- break;
- case XmlNodeType.Whitespace:
- case XmlNodeType.SignificantWhitespace:
- writer.WriteWhitespace(reader.Value);
- break;
- case XmlNodeType.CDATA:
- writer.WriteCData(reader.Value);
- break;
- case XmlNodeType.EntityReference:
- writer.WriteEntityRef(reader.Name);
- break;
- case XmlNodeType.XmlDeclaration:
- case XmlNodeType.ProcessingInstruction:
- writer.WriteProcessingInstruction(reader.Name, reader.Value);
- break;
- case XmlNodeType.DocumentType:
- writer.WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"),
- reader.Value);
- break;
- case XmlNodeType.Comment:
- writer.WriteComment(reader.Value);
- break;
- case XmlNodeType.EndElement:
- writer.WriteFullEndElement();
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment