简体   繁体   中英

openedge: read-xml namespace not found in xml

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM