This is my XML
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Message xmlns:ns1="http://API.JOEJANE.Envelope">
<ns1:MessageHeader>
<ns1:MessageId>ce82fe4f-c843-57a6-14a1-15d79773b638</ns1:MessageId>
<ns1:From>ABC</ns1:From>
<ns1:To>JOEJANE</ns1:To>
<ns1:PlantId>7301</ns1:PlantId>
</ns1:MessageHeader>
</ns1:Message>
This is my code trying to read it into a dataset
def temp-table ttMsgHdr no-undo serialize-name "ns1:MessageHeader"
field MsgId as char serialize-name "ns1:MessageId"
field MsgFrom as char serialize-name "ns1:From"
field MsgTo as char serialize-name "ns1:To"
field PlantId as char serialize-name "ns1:PlantId".
def dataset dsONE xml-node-name "ns1:Message" for
ttMsgHdr.
def var dXml as longchar.
dataset dsONE:read-xml("longchar",dXml,"empty",?,?,?,?).
find first ttMsgHdr no-error.
And this is the error I get.
DATASET name 'ns1:Message' in namespace '' not found in XML Document.
I also tried with different namespace like this:
def dataset dsONE xml-node-name "" for
ttMsgHdr.
or
def dataset dsONE xml-node-name "ns1:Message xmlns:ns1=""http://API.JOEJANE.Envelope""" for
ttMsgHdr.
or
def dataset dsONE xml-node-name "ns1:Message xmlns:ns1" for
ttMsgHdr.
But still getting the same error. please help thank you
Try setting the namespace URI and prefix in the dataset definition and then skip the ns1-part in serialize-name:
def temp-table ttMsgHdr no-undo serialize-name "MessageHeader"
field MsgId as char serialize-name "MessageId"
field MsgFrom as char serialize-name "From"
field MsgTo as char serialize-name "To"
field PlantId as char serialize-name "PlantId".
def dataset dsONE namespace-url "http://API.JOEJANE.Envelope"
namespace-prefix "ns1" xml-node-name "Message" for ttMsgHdr.
ns1
is a namespace, since everything is in the same namespace and there are no namespace conflicts, you can just omit it:
def temp-table tt no-undo serialize-name 'MessageHeader'
field cId as char serialize-name 'MessageId'
field cFrom as char serialize-name 'From'
field cTo as char serialize-name 'To'
field cPlantId as char serialize-name 'PlantId'
.
def dataset ds serialize-name 'Message'
for tt
.
dataset ds:read-xml( 'file', 'my.xml', ?, ?, ? ).
find first tt.
message tt.cID.
Watch it run in AblDojo .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.