%String to XML

Hi

I've got a string variable which I need to convert into a XML one.

My main goal here is to use the XML bit I've extracted from a HTML file in a message I need to pass over to an operation.

I'm doing the following which always errors

classMethod WriteNodes(myfile As %String)
{
    Set status=##class(%XML.TextReader).ParseString(myfile,.reader)

....

Any easy way of making this happen?

Kind regards

  • 0
  • 1
  • 160
  • 8
  • 3

Answers

To add up so we can help someone else...

This is what I really needed for this to work

Set reader = ##class(%XML.Reader).%New()
    Set status = reader.OpenString(messagedata)

    Do reader.Rewind()

    If $$$ISERR(status) {do $System.Status.DisplayError(status)}
    
    // Associate a class name with the XML element name
    Do reader.Correlate("MIU","Message.Request")
 

By XML bit I understand you have some myfile="<mynode>anytext</mynode>" or similar in hands

so this should cover your needs:

USER>set sc=##class(%XML.TextReader).ParseString(myfile,.reader)
USER>zwrite @reader.GlobalName
^||CacheTemp=1
^||CacheTemp(1,1)=$lb("element","","mynode","mynode",0,1)
^||CacheTemp(1,2)=$lb("chars","anytext","")
^||CacheTemp(1,3)=$lb("endelement","","mynode","mynode")

or is the content of myfile something else ?? 

That's correct Robert. Althougth, I always get the following error for the parse

comment or processing instruction expected while processing Anonymous Stream at line 1 offset 

<Oceano>
    <Header>
        <DataSource>Oceano</DataSource>
        <DataType>EDAttendance</DataType>
    </Header>
    <Body>
        <MIU>
            <Department>BCH</Department>
            <TotalNumber>6</TotalNumber>
            <NumberWaitingToBeSeen/>
            <LongestWaitMin/>
        </MIU>
        <MIU>
            <Department>BOS</Department>
            <TotalNumber>1</TotalNumber>
            <NumberWaitingToBeSeen>1</NumberWaitingToBeSeen>
            <LongestWaitMin>109293</LongestWaitMin>
        </MIU>
    </Body>
</Oceano>

Hope this helps

structure is OK, and it worked for me.

Removing all CR,LF,TAB,BLANK still looks good here. 
Could you have some control  characters in your string ?

USER>ZZDUMP myfile may show it

USER>write $TR(myfile,$c(13,10,9,32))
<Oceano><Header><DataSource>Oceano</DataSource><DataType>EDAttendance</DataType></Header><Body><MIU><Department>BCH</Department><TotalNumber>6</TotalNumber><NumberWaitingToBeSeen/><LongestWaitMin/></MIU><MIU><Department>BOS</Department><TotalNumber>1</TotalNumber><NumberWaitingToBeSeen>1</NumberWaitingToBeSeen><LongestWaitMin>109293</LongestWaitMin></MIU></Body></Oceano>

This helped

write $TR(myfile,$c(13,10,9,32))

Thanks very much

BTW.

zwrite @reader.GlobalName

USER>zwrite @reader.GlobalName
^||CacheTemp=5
^||CacheTemp(5,1)=$lb("element","","Oceano","Oceano",0,1)
^||CacheTemp(5,2)=$lb("element","","Header","Header",0,2)
^||CacheTemp(5,3)=$lb("element","","DataSource","DataSource",0,3)
^||CacheTemp(5,4)=$lb("chars","Oceano","")
^||CacheTemp(5,5)=$lb("endelement","","DataSource","DataSource")
^||CacheTemp(5,6)=$lb("element","","DataType","DataType",0,3)
^||CacheTemp(5,7)=$lb("chars","EDAttendance","")
^||CacheTemp(5,8)=$lb("endelement","","DataType","DataType")
^||CacheTemp(5,9)=$lb("endelement","","Header","Header")
^||CacheTemp(5,10)=$lb("element","","Body","Body",0,2)
^||CacheTemp(5,11)=$lb("element","","MIU","MIU",0,3)
^||CacheTemp(5,12)=$lb("element","","Department","Department",0,4)
^||CacheTemp(5,13)=$lb("chars","BCH","")
^||CacheTemp(5,14)=$lb("endelement","","Department","Department")
^||CacheTemp(5,15)=$lb("element","","TotalNumber","TotalNumber",0,4)
^||CacheTemp(5,16)=$lb("chars","6","")
^||CacheTemp(5,17)=$lb("endelement","","TotalNumber","TotalNumber")
^||CacheTemp(5,18)=$lb("element","","NumberWaitingToBeSeen","NumberWaitingToBeSeen",0,4)
^||CacheTemp(5,19)=$lb("endelement","","NumberWaitingToBeSeen","NumberWaitingToBeSeen")
^||CacheTemp(5,20)=$lb("element","","LongestWaitMin","LongestWaitMin",0,4)
^||CacheTemp(5,21)=$lb("endelement","","LongestWaitMin","LongestWaitMin")
^||CacheTemp(5,22)=$lb("endelement","","MIU","MIU")
^||CacheTemp(5,23)=$lb("element","","MIU","MIU",0,3)
^||CacheTemp(5,24)=$lb("element","","Department","Department",0,4)
^||CacheTemp(5,25)=$lb("chars","BOS","")
^||CacheTemp(5,26)=$lb("endelement","","Department","Department")
^||CacheTemp(5,27)=$lb("element","","TotalNumber","TotalNumber",0,4)
^||CacheTemp(5,28)=$lb("chars","1","")
^||CacheTemp(5,29)=$lb("endelement","","TotalNumber","TotalNumber")
^||CacheTemp(5,30)=$lb("element","","NumberWaitingToBeSeen","NumberWaitingToBeSeen",0,4)
^||CacheTemp(5,31)=$lb("chars","1","")
^||CacheTemp(5,32)=$lb("endelement","","NumberWaitingToBeSeen","NumberWaitingToBeSeen")
^||CacheTemp(5,33)=$lb("element","","LongestWaitMin","LongestWaitMin",0,4)
^||CacheTemp(5,34)=$lb("chars","109293","")
^||CacheTemp(5,35)=$lb("endelement","","LongestWaitMin","LongestWaitMin")
^||CacheTemp(5,36)=$lb("endelement","","MIU","MIU")
^||CacheTemp(5,37)=$lb("endelement","","Body","Body")
^||CacheTemp(5,38)=$lb("endelement","","Oceano","Oceano")