>>>>> ' Get a XML node attribute >>>>> ' expC1 Node >>>>> ' expC2 Attribute >>>>> Public Function GetXMLNodeAttributeValue(ByVal tcNode As String, ByVal tcAttribute As String) As Boolean >>>>> Dim llFound As Boolean = False >>>>> Dim loAttribute As XmlAttribute = Nothing >>>>> >>>>> ' Reset the values >>>>> cMessage = "" >>>>> cNodeAttribute = "" >>>>> >>>>> ' If we have a content >>>>> If Not oXmlAttributeCollection Is Nothing Then >>>>> oXmlAttributeCollection.RemoveAll() >>>>> End If >>>>> >>>>> ' Select the node >>>>> If oXmlNameSpaceManager Is Nothing Then >>>>> oXmlNode = oXmlDocument.SelectSingleNode(tcNode) >>>>> Else >>>>> oXmlNode = oXmlDocument.SelectSingleNode(tcNode, oXmlNameSpaceManager) >>>>> End If >>>>> >>>>> ' If the node does not exist >>>>> If oXmlNode Is Nothing Then >>>>> cMessage = oApp.StrTran(cNodeDoesNotExist, "##Node##", tcNode) >>>>> Return False >>>>> End If >>>>> >>>>> ' Assign the new attributes to this object >>>>> oXmlAttributeCollection = oXmlNode.Clone.Attributes >>>>> >>>>> ' Scan the attribute collection >>>>> For Each loAttribute In oXmlNode.Attributes >>>>> >>>>> ' If this is the one >>>>> If UCase(loAttribute.Name) = UCase(tcAttribute) Then >>>>> cNodeAttribute = loAttribute.Value >>>>> llFound = True >>>>> Exit For >>>>> End If >>>>> >>>>> Next >>>>> >>>>> ' If we did not find it >>>>> If Not llFound Then >>>>> cMessage = oApp.StrTran(cAttributeDoesNotExist, "##Attribute##", tcAttribute) >>>>> Return False >>>>> End If >>>>> >>>>> Return True >>>>> End Function >>>>>Well, you certainly shouldn't have to clone (assuming the XmlDocument and the NameSpaceManager do not change - but since the method references objects which are external it's a bit difficult to know what else might be going on.
>>> ' If we have a content >>>> If Not oXmlAttributeCollection Is Nothing Then >>>> oXmlAttributeCollection.RemoveAll() >>>> End If >>>>>>
private static bool GetXMLNodeAttributeValue(string tcNode, string tcAttribute) >> { >> var v = oXmlDocument.SelectSingleNode(tcNode); >> if (v == null) return false; >> >> foreach (XmlAttribute a in v.Attributes) >> { >> if (a.Name.ToUpper() == tcAttribute.ToUpper()) >> return true; >> } >> return false; >> }>>Why do you believe .Clone is needed ?