public virtual void WriteNode (XPathNavigator navigator, bool defattr)
{
if (navigator == null)
throw new ArgumentNullException ("navigator");
switch (navigator.NodeType) {
case XPathNodeType.Attribute:
// no operation
break;
case XPathNodeType.Namespace:
// no operation
break;
case XPathNodeType.Text:
WriteString (navigator.Value);
break;
case XPathNodeType.SignificantWhitespace:
WriteWhitespace (navigator.Value);
break;
case XPathNodeType.Whitespace:
WriteWhitespace (navigator.Value);
break;
case XPathNodeType.Comment:
WriteComment (navigator.Value);
break;
case XPathNodeType.ProcessingInstruction:
WriteProcessingInstruction (navigator.Name, navigator.Value);
break;
case XPathNodeType.Root:
if (navigator.MoveToFirstChild ()) {
do {
WriteNode (navigator, defattr);
} while (navigator.MoveToNext ());
navigator.MoveToParent ();
}
break;
case XPathNodeType.Element:
WriteStartElement (navigator.Prefix, navigator.LocalName, navigator.NamespaceURI);
if (navigator.MoveToFirstNamespace (XPathNamespaceScope.Local)) {
do {
if (defattr || navigator.SchemaInfo == null || navigator.SchemaInfo.IsDefault)
WriteAttributeString (navigator.Prefix,
navigator.LocalName == String.Empty ? "xmlns" : navigator.LocalName,
"http://www.w3.org/2000/xmlns/",
navigator.Value);
} while (navigator.MoveToNextNamespace (XPathNamespaceScope.Local));
navigator.MoveToParent ();
}
if (navigator.MoveToFirstAttribute ()) {
do {
if (defattr || navigator.SchemaInfo == null || navigator.SchemaInfo.IsDefault)
WriteAttributeString (navigator.Prefix, navigator.LocalName, navigator.NamespaceURI, navigator.Value);
} while (navigator.MoveToNextAttribute ());
navigator.MoveToParent ();
}
if (navigator.MoveToFirstChild ()) {
do {
WriteNode (navigator, defattr);
} while (navigator.MoveToNext ());
navigator.MoveToParent ();
}
if (navigator.IsEmptyElement)
WriteEndElement ();
else
WriteFullEndElement ();
break;
default:
throw new NotSupportedException ();
}
}
#endif