Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: New node with XML

From: "Dave" <dave5398@----------.--->
To: 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




transparent
Print
Mail
Digg
delicious
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent