× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Comments in-line Stephen.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On Mar 14, 2019, at 12:07 PM, Stephen Coyle <stephenfcoyle@xxxxxxxxx> wrote:

Ok...thank you....following up....

Both the XML and the RPG were only partial listings of what I'm actually
working with.
The actual XML content will have elements that I am not defining in the
data structure so I coded the allowextra.

Allowextra is OK - the only real danger is that if they ever add elements that you should be processing and forgot to tell you you'll have no warning.

The XML content also has elements that are not dimensions of an array that
may be missing data.

The "correct" way to handle this is with count fields for all optional fields. That allows you to detect whether a value was supplied or not and take appropriate action. Allowmissing is lethal. The file could contain the wrong data (i.e. a different set of XML all together) and you'd never know. Use the facility supplied.


I understand how allowmissing=yes can be replaced by count fields on array
elements that may not be present in the XML.
Isn't allowmissing=yes still needed if I have stand alone elements not in
an array that may not have data?

No - just add a count field for the individual fields.


As for the DS definition, I did not code OrderID as an array because I'm
not sure how to mirror the content of the XML I was sent.

Well I coded it as an array because there appeared to be multiple OrderIDs in the XML.

That is my primary issue....how to define the DS to mimic the structure
I've been given.
It seems they have multiple OrderID, Brand and Division elements at the
same level without them being wrapped in parent tags.
If all elements associated with an OrderID were wrapped in <Order> </Order>
tags, I could define Order as an array in the DS.
But OrderID, Brand and Division seem to be stand alone under
<OrderInformation>, but there is more than 1 of each being sent.

Yes - my fault - I missed that this was a rather strange XML structure. I'm tight on time and have to rush but you should be able to use OrdrInformation as the array. Then take the count from the psds element count.

If this doesn't help send me off-line a copy of the XML and I'll take a look.


I've removed the detail under <InvoiceOrderItems> in this snippet to better
see the structure.
I apologize if I am not explaining this well.
The only way I can see to define the DS would be defining each OrderID
separately and I don't want to do that.

-<OrderInformation>

*<OrderID>9000</OrderID>*
<Brand>MyBrand</Brand>
<Division>Div100</Division>

-<InvoiceOrderItems>

</InvoiceOrderItems>

*<OrderID>9001</OrderID>*
<Brand>MyBrand</Brand>
<Division>Div100</Division>

-<InvoiceOrderItems>

</InvoiceOrderItems>

</OrderInformation>

Thanks again,
- Steve


On Thu, Mar 14, 2019 at 10:35 AM Jon Paris <jon.paris@xxxxxxxxxxxxxx> wrote:

Well it is not an array so how would it ever have more than one?

You also made the mistake of saying allowextra (which is OK but don't use
it unless you need it) and allowmissing which if you are using countprefix
you should never need to use. In fact you should try and avoid it like the
plague because (as you have seen here) it allows RPG to all you everything
was OK when it clearly wasn't.

I haven't time to dig in in detail but I think you need something more
like this:

Dcl-DS OrderInformation;
OrderID varchar(50) ;
Brand varchar(50) ;
Division varchar(50) ;
countInvoiceOrderItems int(5);
Dcl-DS InvoiceOrderItems;
countItem int(5);
Dcl-DS Item Dim(10);
ItemShipDate varchar(50) ;
Carrier varchar(50) ;
End-DS ;
End-DS ;
End-DS ;


Then remove allowmssing and allowextra.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On Mar 14, 2019, at 9:49 AM, Stephen Coyle <stephenfcoyle@xxxxxxxxx>
wrote:

Hi All,

So I'm finally getting a chance to play with XML-INTO and I thought it
was
going pretty good.
Then this came up....
In the sample below the data structure only gets populated with OrderID
9000.
OrderID 9001 gets dropped.
Not sure how to make multiple OrderID elements populate into a DS array.
It seems to me that there are multiple OrderID, Brand and Division
elements
within OrderInformation.
I understand how it would be ambiguous but do not know how to structure
the
DS to capture it.
Do I need to ask the XML supplier to wrap each order within their own
Order
tag?

Here is the XML and RPG.
I know the XML-INTO is referencing structures and an XML path that I
didn't
copy into the email...only showing the relevant bits.

Thanks in advance for any info,
- Steve

-<OrderInformation>

<OrderID>9000</OrderID>
<Brand>MyBrand</Brand>
<Division>Div100</Division>

-<InvoiceOrderItems>

-<Item Num="1">

<ItemShipDate>2019-01-16T00:00:07+00:00</ItemShipDate>

<Carrier>FEDEX</Carrier>

</Item>
-<Item Num="2">

<ItemShipDate>2019-01-16T00:00:07+00:00</ItemShipDate>

<Carrier>FEDEX</Carrier>

</Item>

</InvoiceOrderItems>

<OrderID>9001</OrderID>
<Brand>MyBrand</Brand>
<Division>Div100</Division>

-<InvoiceOrderItems>

-<Item Num="1">

<ItemShipDate>2019-01-16T00:00:07+00:00</ItemShipDate>

<Carrier>FEDEX</Carrier>

</Item>

</InvoiceOrderItems>

</OrderInformation>

Dcl-DS OrderInformation;
OrderID varchar(50) ;
Brand varchar(50) ;
Division varchar(50) ;
Dcl-DS InvoiceOrderItems;
Dcl-DS Item Dim(10);
ItemShipDate varchar(50) ;
Carrier varchar(50) ;
End-DS ;
End-DS ;
End-DS ;

XML-INTO FactoryInvoice
%Xml(%Trim(@XMLPath):
'case=any doc=file countprefix=count
path=ReceiverID/SenderID/FactoryInvoice allowextra=yes
allowmissing=yes');
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com

--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com

--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related questions.

Help support midrange.com by shopping at amazon.com with our affiliate link: https://amazon.midrange.com


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.