From 86ffcfbcd72febcdf6805025ac0e83b7343f3cea Mon Sep 17 00:00:00 2001 From: Jason Diamond Date: Thu, 22 Aug 2002 13:11:55 +0000 Subject: [PATCH] Added implementation of namepsace qualified GetElementsByTagName courtesy of Matt Hunter . svn path=/trunk/mcs/; revision=6885 --- mcs/class/System.XML/System.Xml/ChangeLog | 6 +++++ .../System.XML/System.Xml/XmlDocument.cs | 14 ++++++----- mcs/class/System.XML/System.Xml/XmlElement.cs | 18 ++++++--------- mcs/class/System.XML/Test/ChangeLog | 8 ++++++- mcs/class/System.XML/Test/XmlDocumentTests.cs | 23 +++++++++++++++++++ mcs/class/System.XML/Test/XmlElementTests.cs | 23 +++++++++++++++++++ 6 files changed, 74 insertions(+), 18 deletions(-) diff --git a/mcs/class/System.XML/System.Xml/ChangeLog b/mcs/class/System.XML/System.Xml/ChangeLog index 81fedfef630..3f2769fbbdd 100644 --- a/mcs/class/System.XML/System.Xml/ChangeLog +++ b/mcs/class/System.XML/System.Xml/ChangeLog @@ -1,3 +1,9 @@ +2002-08-22 Jason Diamond + + * XmlDocument.cs, XmlElement.cs: Added implementation of namepsace + qualified GetElementsByTagName courtesy of Matt Hunter + . + 2002-08-19 Jason Diamond * XmlDocument.cs, XmlElement.cs: Added implementation of diff --git a/mcs/class/System.XML/System.Xml/XmlDocument.cs b/mcs/class/System.XML/System.Xml/XmlDocument.cs index a3c4bd3b800..54fbc3c8fcf 100644 --- a/mcs/class/System.XML/System.Xml/XmlDocument.cs +++ b/mcs/class/System.XML/System.Xml/XmlDocument.cs @@ -343,25 +343,27 @@ namespace System.Xml public virtual XmlNodeList GetElementsByTagName (string name) { ArrayList nodeArrayList = new ArrayList (); - this.searchNodesRecursively (this, name, nodeArrayList); + this.searchNodesRecursively (this, name, String.Empty, nodeArrayList); return new XmlNodeArrayList (nodeArrayList); } - private void searchNodesRecursively (XmlNode argNode, string argName, ArrayList argArrayList) + private void searchNodesRecursively (XmlNode argNode, string argName, string argNamespaceURI, + ArrayList argArrayList) { XmlNodeList xmlNodeList = argNode.ChildNodes; foreach (XmlNode node in xmlNodeList){ - if (node.Name.Equals (argName)) + if (node.LocalName.Equals (argName) && node.NamespaceURI.Equals (argNamespaceURI)) argArrayList.Add (node); else - this.searchNodesRecursively (node, argName, argArrayList); + this.searchNodesRecursively (node, argName, argNamespaceURI, argArrayList); } } - [MonoTODO] public virtual XmlNodeList GetElementsByTagName (string localName, string namespaceURI) { - throw new NotImplementedException(); + ArrayList nodeArrayList = new ArrayList (); + this.searchNodesRecursively (this, localName, namespaceURI, nodeArrayList); + return new XmlNodeArrayList (nodeArrayList); } private XmlNodeType GetNodeTypeFromString (string nodeTypeString) diff --git a/mcs/class/System.XML/System.Xml/XmlElement.cs b/mcs/class/System.XML/System.Xml/XmlElement.cs index 9a11634a672..be669c5fc74 100644 --- a/mcs/class/System.XML/System.Xml/XmlElement.cs +++ b/mcs/class/System.XML/System.Xml/XmlElement.cs @@ -170,27 +170,23 @@ namespace System.Xml public virtual XmlNodeList GetElementsByTagName (string name) { ArrayList nodeArrayList = new ArrayList (); - this.searchNodesRecursively (this, name, nodeArrayList); + this.searchNodesRecursively (this, name, String.Empty, nodeArrayList); return new XmlNodeArrayList (nodeArrayList); } - private void searchNodesRecursively (XmlNode argNode, string argName, ArrayList argArrayList) + private void searchNodesRecursively (XmlNode argNode, string argName, string argNamespaceURI, + ArrayList argArrayList) { XmlNodeList xmlNodeList = argNode.ChildNodes; - foreach (XmlNode node in xmlNodeList){ - if (node.Name.Equals (argName)) + foreach (XmlNode node in xmlNodeList) + { + if (node.LocalName.Equals (argName) && node.NamespaceURI.Equals (argNamespaceURI)) argArrayList.Add (node); else - this.searchNodesRecursively (node, argName, argArrayList); + this.searchNodesRecursively (node, argName, argNamespaceURI, argArrayList); } } - [MonoTODO] - public virtual XmlNodeList GetElementsByTagName (string localName, string namespaceURI) - { - throw new NotImplementedException (); - } - [MonoTODO] public virtual bool HasAttribute (string name) { diff --git a/mcs/class/System.XML/Test/ChangeLog b/mcs/class/System.XML/Test/ChangeLog index 1ad4fa6afc1..a3d4249efcd 100644 --- a/mcs/class/System.XML/Test/ChangeLog +++ b/mcs/class/System.XML/Test/ChangeLog @@ -1,6 +1,12 @@ +2002-08-22 Jason Diamond + + * XmlDocumentTests.cs, XmlElementTests.cs: Added tests for + namespace qualified GetElementsByTagName courtesy of Matt Hunter + . + 2002-08-19 Jason Diamond - * XmlDocument.cs, XmlElement.cs: Added tests for + * XmlDocumentTests.cs, XmlElementTests.cs: Added tests for GetElementsByTagName courtesy of Matt Hunter . 2002-08-17 Jason Diamond diff --git a/mcs/class/System.XML/Test/XmlDocumentTests.cs b/mcs/class/System.XML/Test/XmlDocumentTests.cs index 427cc70091d..5ede6bf749d 100644 --- a/mcs/class/System.XML/Test/XmlDocumentTests.cs +++ b/mcs/class/System.XML/Test/XmlDocumentTests.cs @@ -547,6 +547,29 @@ namespace MonoTests.System.Xml AssertEquals ("GetElementsByTagName (string) returned incorrect count.", 4, bookList.Count); } + public void TestGetElementsByTagNameUsingNameSpace () + { + StringBuilder xml = new StringBuilder (); + xml.Append (" "); + xml.Append ("XML Fun " ); + xml.Append ("John Doe " ); + xml.Append ("34.95 " ); + xml.Append (" " ); + xml.Append ("Bear and the Dragon " ); + xml.Append ("Tom Clancy " ); + xml.Append ("6.95 " ); + xml.Append ("Bourne Identity " ); + xml.Append ("Robert Ludlum " ); + xml.Append ("9.95"); + + MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml.ToString ())); + document = new XmlDocument (); + document.Load (memoryStream); + XmlNodeList bookList = document.GetElementsByTagName ("book", "http://www.goo.com"); + AssertEquals ("GetElementsByTagName (string, uri) returned incorrect count.", 2, bookList.Count); + } + public void TestInnerAndOuterXml () { diff --git a/mcs/class/System.XML/Test/XmlElementTests.cs b/mcs/class/System.XML/Test/XmlElementTests.cs index 31fda435418..734b36108dd 100644 --- a/mcs/class/System.XML/Test/XmlElementTests.cs +++ b/mcs/class/System.XML/Test/XmlElementTests.cs @@ -154,6 +154,29 @@ namespace MonoTests.System.Xml AssertEquals ("GetElementsByTagName (string) returned incorrect count.", 4, bookList.Count); } + public void TestGetElementsByTagNameUsingNameSpace () + { + StringBuilder xml = new StringBuilder (); + xml.Append (" "); + xml.Append ("XML Fun " ); + xml.Append ("John Doe " ); + xml.Append ("34.95 " ); + xml.Append (" " ); + xml.Append ("Bear and the Dragon " ); + xml.Append ("Tom Clancy " ); + xml.Append ("6.95 " ); + xml.Append ("Bourne Identity " ); + xml.Append ("Robert Ludlum " ); + xml.Append ("9.95"); + + MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml.ToString ())); + document = new XmlDocument (); + document.Load (memoryStream); + XmlNodeList bookList = document.GetElementsByTagName ("book", "http://www.foo.com"); + AssertEquals ("GetElementsByTagName (string, uri) returned incorrect count.", 1, bookList.Count); + } + public void TestOuterXmlWithNamespace () { XmlElement element = document.CreateElement ("foo", "bar", "#foo"); -- 2.25.1