2 // System.Xml.XPath.XPathDocument
5 // Tim Coleman (tim@timcoleman.com)
6 // Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
8 // (C) Copyright 2002 Tim Coleman
9 // (C) 2003 Atsushi Enomoto
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Collections;
34 using System.ComponentModel;
38 using System.Xml.Schema;
39 using System.Xml.Serialization;
42 namespace System.Xml.XPath
45 [XmlSchemaProvider ("GetSchema")]
46 public class XPathDocument : IXPathNavigable, IXPathEditable,
47 IChangeTracking, IRevertibleChangeTracking, IXmlSerializable
49 public class XPathDocument : IXPathNavigable
52 DTMXPathDocument document;
54 XPathEditableDocument editable;
61 public XPathDocument ()
62 : this (new NameTable ())
67 public XPathDocument (XmlNameTable nameTable)
69 editable = new XPathEditableDocument (new XmlDocument (nameTable));
72 public XPathDocument (Stream stream)
77 public XPathDocument (string uri)
78 : this (uri, XmlSpace.None, true)
82 public XPathDocument (string uri, bool acceptChangesOnLoad)
83 : this (uri, XmlSpace.None, acceptChangesOnLoad)
87 public XPathDocument (TextReader reader)
93 public XPathDocument (XmlReader reader)
94 : this (reader, XmlSpace.None, true)
99 public XPathDocument (XmlReader reader, bool acceptChangesOnLoad)
100 : this (reader, XmlSpace.None, acceptChangesOnLoad)
105 public XPathDocument (string uri, XmlSpace space)
106 : this (uri, space, true)
111 public XPathDocument (XmlReader reader, XmlSpace space)
112 : this (reader, space, true)
117 public XPathDocument (string uri, XmlSpace space, bool acceptChangesOnLoad)
119 XmlValidatingReader vr = null;
121 vr = new XmlValidatingReader (new XmlTextReader (uri));
122 vr.ValidationType = ValidationType.None;
123 Initialize (vr, space, acceptChangesOnLoad);
131 public XPathDocument (Stream stream, bool acceptChangesOnLoad)
133 XmlValidatingReader vr = new XmlValidatingReader (new XmlTextReader (stream));
134 vr.ValidationType = ValidationType.None;
135 Initialize (vr, XmlSpace.None, acceptChangesOnLoad);
139 public XPathDocument (TextReader reader, bool acceptChangesOnLoad)
141 XmlValidatingReader vr = new XmlValidatingReader (new XmlTextReader (reader));
142 vr.ValidationType = ValidationType.None;
143 Initialize (vr, XmlSpace.None, acceptChangesOnLoad);
147 public XPathDocument (XmlReader reader, XmlSpace space, bool acceptChangesOnLoad)
149 Initialize (reader, space, acceptChangesOnLoad);
152 public XPathDocument (Stream stream)
154 XmlValidatingReader vr = new XmlValidatingReader (new XmlTextReader (stream));
155 vr.ValidationType = ValidationType.None;
156 Initialize (vr, XmlSpace.None);
159 public XPathDocument (string uri)
160 : this (uri, XmlSpace.None)
164 public XPathDocument (TextReader reader)
166 XmlValidatingReader vr = new XmlValidatingReader (new XmlTextReader (reader));
167 vr.ValidationType = ValidationType.None;
168 Initialize (vr, XmlSpace.None);
171 public XPathDocument (XmlReader reader)
172 : this (reader, XmlSpace.None)
176 public XPathDocument (string uri, XmlSpace space)
178 XmlValidatingReader vr = null;
180 vr = new XmlValidatingReader (new XmlTextReader (uri));
181 vr.ValidationType = ValidationType.None;
182 Initialize (vr, space);
189 public XPathDocument (XmlReader reader, XmlSpace space)
191 Initialize (reader, space);
195 private void Initialize (XmlReader reader, XmlSpace space)
197 document = new DTMXPathDocumentBuilder (reader, space).CreateDocument ();
200 private void Initialize (XmlReader reader, XmlSpace space, bool acceptChangesOnLoad)
202 document = new DTMXPathDocumentBuilder (reader, space).CreateDocument ();
211 public event NodeChangedEventHandler ChangeRejected;
213 public event NodeChangedEventHandler ItemUpdated;
215 public event NodeChangedEventHandler ItemUpdating;
217 public event NodeChangedEventHandler ItemInserted;
219 public event NodeChangedEventHandler ItemInserting;
221 public event NodeChangedEventHandler ItemDeleted;
223 public event NodeChangedEventHandler ItemDeleting;
225 public event NodeChangedEventHandler RejectingChange;
236 public bool EnableChangeTracking {
237 get { throw new NotImplementedException (); }
238 set { throw new NotImplementedException (); }
242 public Encoding Encoding {
243 get { throw new NotImplementedException (); }
244 set { throw new NotImplementedException (); }
248 bool IChangeTracking.IsChanged {
249 get { throw new NotImplementedException (); }
253 public XmlNameTable NameTable {
254 get { throw new NotImplementedException (); }
258 public bool PreserveWhiteSpace {
259 get { throw new NotImplementedException (); }
263 public XmlSchemaSet Schemas {
264 get { throw new NotImplementedException (); }
265 set { throw new NotImplementedException (); }
270 #endregion // Properies
277 public void AcceptChanges ()
279 throw new NotImplementedException ();
282 /* It will disappear in 2.0 RTM
284 public XPathChangeNavigator CreateChangeNavigator ()
286 throw new NotImplementedException ();
291 public XPathEditableNavigator CreateEditor ()
293 if (editable == null)
294 throw new NotImplementedException ();
295 return editable.CreateEditor ();
298 [MonoTODO ("This code is only for compatibility.")]
299 public XPathNavigator CreateNavigator ()
301 if (editable == null)
302 return document.CreateNavigator ();
304 return editable.CreateNavigator ();
307 public XmlWriter CreateWriter ()
309 return CreateEditor ().AppendChild ();
313 public virtual XmlSchema GetSchema ()
315 throw new NotImplementedException ();
319 public static XmlQualifiedName GetXPathDocumentSchema (XmlSchemaSet schemas)
321 throw new NotImplementedException ();
325 public bool HasChanges ()
327 if (editable == null)
328 throw new NotImplementedException ();
329 return editable.HasChanges ();
334 public void LoadXml (string xml)
336 throw new NotImplementedException ();
337 // tree = new XPathDocumentTree (xmlReader);
338 // if (acceptChangesOnLoad)
343 public void ReadXml (XmlReader reader)
345 if (editable == null)
346 throw new NotImplementedException ();
347 editable.ReadXml (reader);
351 public void RejectChanges ()
353 if (editable == null)
354 throw new NotImplementedException ();
355 editable.RejectChanges ();
358 [MonoTODO ("Confirm writer settings etc.")]
359 public void Save (Stream stream)
361 Save (new XmlTextWriter (stream, null));
364 [MonoTODO ("Confirm writer settings etc.")]
365 public void Save (string filename)
367 using (XmlWriter w = new XmlTextWriter (filename, null)) {
372 [MonoTODO ("Confirm writer settings etc.")]
373 public void Save (TextWriter writer)
375 Save (new XmlTextWriter (writer));
379 public void Save (XmlWriter writer)
381 throw new NotImplementedException ();
385 public XPathNodeIterator SelectNodes (string xpath)
387 return SelectNodes (xpath, null);
391 public XPathNodeIterator SelectNodes (XPathExpression expr)
393 throw new NotImplementedException ();
397 public XPathNodeIterator SelectNodes (string xpath ,IXmlNamespaceResolver nsResolver)
399 throw new NotImplementedException ();
403 public XPathEditableNavigator SelectSingleNode (string xpath)
405 return SelectSingleNode (xpath, null);
409 public XPathEditableNavigator SelectSingleNode (XPathExpression expr)
411 throw new NotImplementedException ();
415 public XPathEditableNavigator SelectSingleNode (string xpath ,IXmlNamespaceResolver nsResolver)
417 throw new NotImplementedException ();
421 public void WriteXml (XmlWriter writer)
423 throw new NotImplementedException ();
428 public XPathNavigator CreateNavigator ()
430 return document.CreateNavigator ();