public static Stream Format(Stream input) { int t1 = Environment.TickCount; XmlTextReader r = new XmlTextReader(input); r.DtdProcessing = DtdProcessing.Ignore; r.WhitespaceHandling = WhitespaceHandling.None; XmlNamespaceManager nsmgr = XmlNamespaces.GetNamespaceManager(r.NameTable); MemoryStream m = new MemoryStream(); XmlTextWriter w = new XmlTextWriter(m, Encoding.UTF8); w.Formatting = Formatting.Indented; w.Indentation = 2; w.WriteStartDocument(); while (r.Read()) { switch (r.NodeType) { case XmlNodeType.Element: w.WriteStartElement(r.Prefix, r.LocalName, r.NamespaceURI); if (r.HasAttributes) { string elementQName = XmlUtil.GetQName(r, nsmgr); for (int i = 0; i < r.AttributeCount; ++i) { r.MoveToAttribute(i); string attributeQName = XmlUtil.GetQName(r, nsmgr); string xpath = elementQName + "/@" + attributeQName; // Filter out language="*" if ((xpath.Equals(XPaths.languageAttribute1, StringComparison.Ordinal) || xpath.Equals(XPaths.languageAttribute2, StringComparison.Ordinal)) && String.Equals(r.Value, "*", StringComparison.Ordinal)) { continue; } // Filter out attributes with empty values if attribute is on the list... if (String.IsNullOrEmpty(r.Value) && Array.BinarySearch(XPaths.emptyAttributeList, xpath) >= 0) { continue; } w.WriteAttributeString(r.Prefix, r.LocalName, r.NamespaceURI, r.Value); } r.MoveToElement(); //Moves the reader back to the element node. } if (r.IsEmptyElement) { w.WriteEndElement(); } break; case XmlNodeType.EndElement: w.WriteEndElement(); break; case XmlNodeType.Comment: w.WriteComment(r.Value); break; case XmlNodeType.CDATA: w.WriteCData(r.Value); break; case XmlNodeType.Text: w.WriteString(r.Value); break; } } w.WriteEndDocument(); w.Flush(); m.Position = 0; Util.WriteLog(String.Format(CultureInfo.CurrentCulture, "ManifestWriter.Format t={0}", Environment.TickCount - t1)); return(m); }
public static Stream Format(Stream input) { int tickCount = Environment.TickCount; XmlTextReader r = new XmlTextReader(input) { WhitespaceHandling = WhitespaceHandling.None }; XmlNamespaceManager namespaceManager = XmlNamespaces.GetNamespaceManager(r.NameTable); MemoryStream w = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(w, Encoding.UTF8) { Formatting = Formatting.Indented, Indentation = 2 }; writer.WriteStartDocument(); while (r.Read()) { string str; int num2; switch (r.NodeType) { case XmlNodeType.Element: writer.WriteStartElement(r.Prefix, r.LocalName, r.NamespaceURI); if (!r.HasAttributes) { goto Label_0162; } str = XmlUtil.GetQName(r, namespaceManager); num2 = 0; goto Label_014E; case XmlNodeType.Attribute: { continue; } case XmlNodeType.Text: { writer.WriteString(r.Value); continue; } case XmlNodeType.CDATA: { writer.WriteCData(r.Value); continue; } case XmlNodeType.Comment: { writer.WriteComment(r.Value); continue; } case XmlNodeType.EndElement: { writer.WriteEndElement(); continue; } default: { continue; } } Label_00BB: r.MoveToAttribute(num2); string qName = XmlUtil.GetQName(r, namespaceManager); string str3 = str + "/@" + qName; if (((!str3.Equals("asmv1:assemblyIdentity/@language", StringComparison.Ordinal) && !str3.Equals("asmv2:assemblyIdentity/@language", StringComparison.Ordinal)) || !string.Equals(r.Value, "*", StringComparison.Ordinal)) && (!string.IsNullOrEmpty(r.Value) || (Array.BinarySearch <string>(XPaths.emptyAttributeList, str3) < 0))) { writer.WriteAttributeString(r.Prefix, r.LocalName, r.NamespaceURI, r.Value); } num2++; Label_014E: if (num2 < r.AttributeCount) { goto Label_00BB; } r.MoveToElement(); Label_0162: if (r.IsEmptyElement) { writer.WriteEndElement(); } } writer.WriteEndDocument(); writer.Flush(); w.Position = 0L; Util.WriteLog(string.Format(CultureInfo.CurrentCulture, "ManifestWriter.Format t={0}", new object[] { Environment.TickCount - tickCount })); return(w); }