// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
//\r
-#if NET_2_0\r
\r
using System;\r
using System.Text;\r
{\r
public XPathNavigatorReader (XPathNavigator nav)\r
{\r
- switch (nav.NodeType) {\r
- case XPathNodeType.Element:\r
- case XPathNodeType.Root:\r
- break;\r
- default:\r
- throw new InvalidOperationException (String.Format ("NodeType {0} is not supported to read as a subtree of an XPathNavigator.", nav.NodeType));\r
- }\r
current = nav.Clone ();\r
}\r
\r
return count;\r
}\r
\r
+ /*\r
private bool MoveToAttributeNavigator (int i)\r
{\r
if (ReadState != ReadState.Interactive)\r
return false;\r
}\r
\r
- /*\r
public override string this [int i] {\r
get {\r
XPathNavigator backup = current.Clone ();\r
return ret;\r
}\r
\r
-#if NET_1_1\r
-#else\r
- public override string ReadInnerXml ()\r
- {\r
- if (ReadState != ReadState.Interactive)\r
- return String.Empty;\r
-\r
- switch (NodeType) {\r
- case XmlNodeType.Attribute:\r
- return Value;\r
- case XmlNodeType.Element:\r
- if (IsEmptyElement)\r
- return String.Empty;\r
-\r
- int startDepth = Depth;\r
-\r
- innerXmlBuilder.Length = 0;\r
- bool loop = true;\r
- do {\r
- Read ();\r
- if (NodeType ==XmlNodeType.None)\r
- throw new InvalidOperationException ("unexpected end of xml.");\r
- else if (NodeType == XmlNodeType.EndElement && Depth == startDepth) {\r
- loop = false;\r
- Read ();\r
- }\r
- else\r
- innerXmlBuilder.Append (GetCurrentTagMarkup ());\r
- } while (loop);\r
- string xml = innerXmlBuilder.ToString ();\r
- innerXmlBuilder.Length = 0;\r
- return xml;\r
- case XmlNodeType.None:\r
- // MS document is incorrect. Seems not to progress.\r
- return String.Empty;\r
- default:\r
- Read ();\r
- return String.Empty;\r
- }\r
- }\r
- \r
- StringBuilder atts = new StringBuilder ();\r
- private string GetCurrentTagMarkup ()\r
- {\r
- switch (NodeType) {\r
- case XmlNodeType.CDATA:\r
- return String.Format ("<![CDATA[{0}]]>", Value.Replace ("]]>", "]]>"));\r
- case XmlNodeType.Text:\r
- return Value.Replace ("<", "<");\r
- case XmlNodeType.Comment:\r
- return String.Format ("<!--{0}-->", Value);\r
- case XmlNodeType.SignificantWhitespace:\r
- case XmlNodeType.Whitespace:\r
- return Value;\r
- case XmlNodeType.EndElement:\r
- return String.Format ("</{0}>", Name);\r
- }\r
-\r
- bool isEmpty = IsEmptyElement;\r
- string name = Name;\r
- atts.Length = 0;\r
- XPathNavigator temp = current.Clone ();\r
- while (temp.MoveToNextAttribute ())\r
- atts.AppendFormat (" {0}='{1}'", temp.Name, temp.Value.Replace ("'", "'"));\r
- if (!IsEmptyElement)\r
- return String.Format ("<{0}{1}>", name, atts);\r
- else\r
- return String.Format ("<{0}{1} />", name, atts);\r
- }\r
-\r
- // Arranged copy of XmlTextReader.ReadOuterXml()\r
- public override string ReadOuterXml ()\r
- {\r
- if (ReadState != ReadState.Interactive)\r
- return String.Empty;\r
-\r
- switch (NodeType) {\r
- case XmlNodeType.Attribute:\r
- // strictly incompatible with MS... (it holds spaces attribute between name, value and "=" char (very trivial).\r
- return String.Format ("{0}={1}{2}{1}", Name, QuoteChar, ReadInnerXml ());\r
- case XmlNodeType.Element:\r
- bool isEmpty = IsEmptyElement;\r
- string name = Name;\r
- StringBuilder atts = new StringBuilder ();\r
- XPathNavigator temp = current.Clone ();\r
- while (temp.MoveToNextAttribute ())\r
- atts.AppendFormat (" {0}='{1}'", temp.Name, temp.Value.Replace ("'", "'"));\r
-\r
- if (!isEmpty)\r
- return String.Format ("{0}{1}</{2}>", GetCurrentTagMarkup (), atts, ReadInnerXml (), name);\r
- else\r
- return String.Format ("{0}", GetCurrentTagMarkup ());\r
- case XmlNodeType.None:\r
- // MS document is incorrect. Seems not to progress.\r
- return String.Empty;\r
- default:\r
- Read ();\r
- return String.Empty;\r
- }\r
- }\r
-#endif\r
\r
public override string LookupNamespace (string prefix)\r
{\r
XPathNavigator backup = current.Clone ();\r
try {\r
this.MoveToElement ();\r
+ if (current.NodeType != XPathNodeType.Element) // text etc.\r
+ current.MoveToParent ();\r
if (current.MoveToFirstNamespace ()) {\r
do {\r
if (current.LocalName == prefix)\r
#endregion\r
}\r
}\r
-\r
-#endif\r