![]() |
![]() | ![]() | ![]() | Altova Mailing List Archives>Archive Index >microsoft.public.xml Archive Home >Recent entries >Thread Prev - Re: New node with XML >Thread Next - Re: New node with XML Re: New node with XMLTo: NULL Date: 3/5/2005 12:37:00 PM "Joe Fawcett" <joefawcett@h...> wrote in message news:uKnJs6WIFHA.4060@T...... > "Dave" <dave5398@b...> wrote in message > news:upawMZEIFHA.2936@T...... > > > > "Joe Fawcett" <joefawcett@h...> wrote in message > > news:OtAPn9CIFHA.2936@T...... > >> "Dave" <dave5398@b...> wrote in message > >> news:ubVSrcCIFHA.1528@T...... > >> > Am I missing something or is there an easy way to do this. Suppose I > > have > >> > loaded my XML string into a DOMDocument . I have a node whose XML I > > want to > >> > replace with new specified XML. This is the equivalent of > > MyDOMElement.XML = > >> > sNewXML but I can't find a built in way to do this since the node.XML > >> > property is read only - I must have missed something as the only way I > > have > >> > found is really a long way round. Can somebody tell me the easy way > > please. > >> > > >> > Dave > >> > > >> > > >> There's no real quick way. You can use the replaceChild method or just > > delete > >> the node and append a new one. > >> > >> -- > >> > >> Joe (MVP - XML) > >> > >> > > Hi Joe, > > > > Thanks. I thought as much. It's really as bad as I suspected. The next > > version should really make the XML property writeable as well. In fact, a > > lot of the XML stuff is so (typically MS) over-engineered that I've had to > > code a load of stuff in C++ to actually DO anything - eg, given an XML > > string, how do you get a given tag's attribute? Big job, whereas if you > > just search for it direct, it's actually simple. > > > > For this job, if I've got a new XML string I want to put into a node I have > > to create a new DOMDocument, load the XML then do a load of recursive calls > > to traverse the whole structure creating corresponding nodes in my original > > DOMDocument. What a pain!!! So much simpler to put Node.XML=newXML - no? > > Or can you think of anything neater? > > > > Dave > > > > Regards, > > > > Davd > > > Although I often criticise Microsoft you can't really balme them for this one, > it's a fairly standardised interface. > Sounds like an XSLT transform would do the job, downside is it's another API to > learn. > Another combination that would suit would be the XmlReader/XmlWriter classses in > the .net framework or the SAX methods. > If you post some example of your type of problem I'll try to come up with basic > XSLT that you can build on. > > -- > > Joe (MVP - XML) Hi Joe, Thanks. I DO blame Microsoft because their philosophy is "if it's easy, complicate it!" I don't know what XSLT is and I suspect I don't want to - probably another Microsoft lash up job! (cf object persistence a la Microsoft - big nightmare, I have rolled my own - a couple of simple routines and done!, same for encryption while we're on the subject ) Anyway I solved this in a completely unexpected way (illogical but the two illogicalities seem to cancel each other!!). My problem is given a DOMElement node, replace it with one using new, specified XML. In fact, if you load the XML into a NEW DOMDocument, you can replace the node in DOMDocumentA, directly with the one in DOMDocumentB. I had assumed elements of the first document could not communicate with elements in another one in this way, but it works! Here is what I do. To replace a node which SHOULD be: aNode.XML=newXML, I use: Private Function ReplaceNode(aNode As IXMLDOMElement, newXML As String) As Boolean Dim pDoc As New DOMDocument30 ReplaceNode = False If Not pDoc.loadXML(newXML) Then Exit Function aNode.parentNode.replaceChild pDoc.documentElement, aNode ReplaceNode = True End Function This seems too easy and you'll tell me there's going to be a problem with it, but so far it looks OK. Dave | ![]() | ![]() | ![]() |
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | |||||
|
