1: /// <summary>
2: /// 從 XmlReader 複製到 XmlWriter
3: /// </summary>
4: /// <param name="reader"></param>
5: /// <param name="writer"></param>
6: private static void XmlCopyPipe(XmlReader reader, XmlWriter writer)
7: { 8: if (reader == null)
9: { 10: throw new ArgumentNullException("reader"); 11: }
12: if (writer == null)
13: { 14: throw new ArgumentNullException("writer"); 15: }
16: while (reader.Read() == true)
17: { 18: switch (reader.NodeType)
19: { 20: case XmlNodeType.Element:
21: writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
22: writer.WriteAttributes(reader, true);
23: if (reader.IsEmptyElement)
24: { 25: writer.WriteEndElement();
26: }
27: break;
28: case XmlNodeType.Text:
29: writer.WriteString(reader.Value);
30: break;
31: case XmlNodeType.Whitespace:
32: case XmlNodeType.SignificantWhitespace:
33: writer.WriteWhitespace(reader.Value);
34: break;
35: case XmlNodeType.CDATA:
36: writer.WriteCData(reader.Value);
37: break;
38: case XmlNodeType.EntityReference:
39: writer.WriteEntityRef(reader.Name);
40: break;
41: case XmlNodeType.XmlDeclaration:
42: case XmlNodeType.ProcessingInstruction:
43: writer.WriteProcessingInstruction(reader.Name, reader.Value);
44: break;
45: case XmlNodeType.DocumentType:
46: writer.WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"), reader.Value); 47: break;
48: case XmlNodeType.Comment:
49: writer.WriteComment(reader.Value);
50: break;
51: case XmlNodeType.EndElement:
52: writer.WriteFullEndElement();
53: break;
54: }
55: }
56: }