Guest User

Untitled

a guest
Apr 19th, 2014
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. private MemoryStream ProcessMemoryStream(Stream inputStream, bool dispose)
  2. {
  3. StreamWriter xmlStream = null;
  4. var outputStream = new MemoryStream();
  5. bool continueFilter = false;
  6. try
  7. {
  8. xmlStream = new StreamWriter(outputStream);
  9. using (var reader = XmlReader.Create(inputStream))
  10. {
  11. using (
  12. var writer = XmlWriter.Create(xmlStream,
  13. new XmlWriterSettings() {ConformanceLevel = ConformanceLevel.Auto}))
  14. {
  15. while (reader.Read())
  16. {
  17. if (reader.LocalName.Equals("SignatureConfirmation") &&
  18. reader.NamespaceURI.Equals(
  19. "http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"))
  20. {
  21. if (!reader.IsEmptyElement) continueFilter = reader.IsStartElement();
  22. }
  23. else if (reader.LocalName.Equals("Signature") &&
  24. reader.NamespaceURI.Equals("http://www.w3.org/2000/09/xmldsig#"))
  25. {
  26. if (!reader.IsEmptyElement) continueFilter = reader.IsStartElement();
  27. }
  28. else if (continueFilter)
  29. {
  30. // continue to next node
  31. }
  32. else
  33. XmlHelper.WriteShallowNode(reader, writer);
  34. }
  35. writer.Flush();
  36. }
  37. reader.Close();
  38. }
  39. outputStream.Position = 0;
  40. return outputStream;
  41. }
  42. catch (Exception ex)
  43. {
  44. // handle error
  45. throw;
  46. }
  47. finally
  48. {
  49. if (xmlStream != null && dispose) xmlStream.Dispose();
  50. }
  51. }
  52.  
  53. internal static class XmlHelper
  54. {
  55. internal static void WriteShallowNode(XmlReader reader, XmlWriter writer)
  56. {
  57. if (reader == null)
  58. {
  59. throw new ArgumentNullException("reader");
  60. }
  61. if (writer == null)
  62. {
  63. throw new ArgumentNullException("writer");
  64. }
  65.  
  66. switch (reader.NodeType)
  67. {
  68. case XmlNodeType.Element:
  69. writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
  70. writer.WriteAttributes(reader, true);
  71. if (reader.IsEmptyElement)
  72. {
  73. writer.WriteEndElement();
  74. }
  75. break;
  76. case XmlNodeType.Text:
  77. writer.WriteString(reader.Value);
  78. break;
  79. case XmlNodeType.Whitespace:
  80. case XmlNodeType.SignificantWhitespace:
  81. writer.WriteWhitespace(reader.Value);
  82. break;
  83. case XmlNodeType.CDATA:
  84. writer.WriteCData(reader.Value);
  85. break;
  86. case XmlNodeType.EntityReference:
  87. writer.WriteEntityRef(reader.Name);
  88. break;
  89. case XmlNodeType.XmlDeclaration:
  90. case XmlNodeType.ProcessingInstruction:
  91. writer.WriteProcessingInstruction(reader.Name, reader.Value);
  92. break;
  93. case XmlNodeType.DocumentType:
  94. writer.WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"),
  95. reader.Value);
  96. break;
  97. case XmlNodeType.Comment:
  98. writer.WriteComment(reader.Value);
  99. break;
  100. case XmlNodeType.EndElement:
  101. writer.WriteFullEndElement();
  102. break;
  103. }
  104. }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment