}
#if NET_2_0
- [MonoTODO ("defattr handling")]
+ [MonoTODO ("test defattr handling")]
public virtual void WriteNode (XPathNavigator navigator, bool defattr)
{
if (navigator == null)
switch (navigator.NodeType) {
case XPathNodeType.Attribute:
case XPathNodeType.Namespace:
- WriteAttributeString (navigator.Prefix, navigator.LocalName, navigator.NamespaceURI, navigator.Value);
+ if (defattr || navigator.SchemaInfo == null ||
+ !navigator.SchemaInfo.IsDefault)
+ WriteAttributeString (navigator.Prefix,
+ navigator.LocalName,
+ navigator.NamespaceURI,
+ navigator.Value);
+ 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;
default:
WriteNode (navigator.ReadSubtree (), defattr);
using System.IO;\r
using System.Text;\r
using System.Xml;\r
+using System.Xml.XPath;\r
\r
using NUnit.Framework;\r
\r
+using AssertType = NUnit.Framework.Assert;\r
+\r
namespace MonoTests.System.Xml\r
{\r
[TestFixture]\r
xtw.Close ();\r
Assert.AreEqual (xml, writer.ToString ());\r
}\r
+\r
+#if NET_2_0\r
+\r
+ XPathNavigator GetNavigator (string xml)\r
+ {\r
+ return new XPathDocument (XmlReader.Create (\r
+ new StringReader (xml))).CreateNavigator ();\r
+ }\r
+\r
+ string WriteNavigator (XPathNavigator nav, bool defattr)\r
+ {\r
+ StringWriter sw = new StringWriter ();\r
+ XmlWriterSettings settings = new XmlWriterSettings ();\r
+ settings.OmitXmlDeclaration = true;\r
+ settings.ConformanceLevel = ConformanceLevel.Fragment;\r
+ using (XmlWriter w = XmlWriter.Create (sw, settings)) {\r
+ w.WriteNode (nav, defattr);\r
+ }\r
+ return sw.ToString ();\r
+ }\r
+\r
+ [Test]\r
+ public void WriteNodeNavigator1 ()\r
+ {\r
+ XPathNavigator nav = GetNavigator ("<root>test<!-- comment --></root>");\r
+ // at Root\r
+ AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteNavigator (nav, false), "#1");\r
+ // at document element\r
+ nav.MoveToFirstChild ();\r
+ AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteNavigator (nav, false), "#2");\r
+ // at text\r
+ nav.MoveToFirstChild ();\r
+ AssertType.AreEqual ("test", WriteNavigator (nav, false), "#3");\r
+\r
+ // at comment\r
+ nav.MoveToNext ();\r
+ AssertType.AreEqual ("<!-- comment -->", WriteNavigator (nav, false), "#4");\r
+ }\r
+\r
+ string WriteSubtree (XPathNavigator nav)\r
+ {\r
+ StringWriter sw = new StringWriter ();\r
+ XmlWriterSettings settings = new XmlWriterSettings ();\r
+ settings.OmitXmlDeclaration = true;\r
+ settings.ConformanceLevel = ConformanceLevel.Fragment;\r
+ using (XmlWriter w = XmlWriter.Create (sw, settings)) {\r
+ nav.WriteSubtree(w);\r
+ }\r
+ return sw.ToString ();\r
+ }\r
+\r
+ [Test]\r
+ public void NavigatorWriteSubtree1 ()\r
+ {\r
+ XPathNavigator nav = GetNavigator ("<root>test<!-- comment --></root>");\r
+ // at Root\r
+ AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteSubtree (nav), "#1");\r
+ // at document element\r
+ nav.MoveToFirstChild ();\r
+ AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteSubtree (nav), "#2");\r
+ // at text\r
+ nav.MoveToFirstChild ();\r
+ AssertType.AreEqual ("test", WriteSubtree (nav), "#3");\r
+\r
+ // at comment\r
+ nav.MoveToNext ();\r
+ AssertType.AreEqual ("<!-- comment -->", WriteSubtree (nav), "#4");\r
+ }\r
+#endif\r
+\r
}\r
\r
internal class DefaultXmlWriter : XmlWriter\r