11.3 --> 11.7
Could anyone tell me if this could give us more trouble than just the warning? After upgrading to 11.7 we start getting this error in the appserver log:
Warning: Duplicate XML-NODE-NAME for Value1 and Value2. READ-XML might not work prperly (18544)
We are using a standard XML given from 3. party (we can't change it). We have converted parts of it to temp-table definitions and that gives us the following (part of if):
DEFINE TEMP-TABLE Value1 NO-UNDO NAMESPACE-PREFIX "" XML-NODE-NAME "Value" SERIALIZE-NAME "Value1"
FIELD Value1_Text AS DECIMAL XML-DATA-TYPE "decimal" XML-NODE-NAME "Value1_Text" XML-NODE-TYPE "TEXT" SERIALIZE-NAME "Value1_Text"
FIELD Height_id AS RECID XML-DATA-TYPE "long" XML-NODE-NAME "Height_id" XML-NODE-TYPE "HIDDEN" SERIALIZE-NAME "Height_id"
FIELD Altitude_id AS RECID XML-DATA-TYPE "long" XML-NODE-NAME "Altitude_id" XML-NODE-TYPE "HIDDEN" SERIALIZE-NAME "Altitude_id"
.
DEFINE TEMP-TABLE Value2 NO-UNDO NAMESPACE-PREFIX "" XML-NODE-NAME "Value" SERIALIZE-NAME "Value2"
FIELD Value2_Text AS DECIMAL XML-DATA-TYPE "decimal" XML-NODE-NAME "Value2_Text" XML-NODE-TYPE "TEXT" SERIALIZE-NAME "Value2_Text"
.
As you can see, it is correct warning, but we never got that in the eariler releases. I believe that was probably because of the serialize-name is different then XML-NODE-NAME.
Could we just ignore the warning by using no-error ?
//Geir Otto
hi,
maybe is because both temps have the same XML-NODE-NAME "Value".
I didnt get any errors when I compiled this, i'm in OpenEdge Release 11.6.3.016
marco aurelio
This warning was introduced in 11.6.3. I'm assuming the temp-tables are members of a dataset. READ-XML() matches the xml-node-name to a temp-table name, and here there are two to choose from. In 11.6.3+, READ-XML() will choose the first temp-table. In 12.0.0 READ-XML() is a little smarter in that it looks at the temp-table fields to try to make the right match.
To answer your question about XML-NODE-NAME vs SERIALIZE-NAME: For XML the value of XML-NODE-NAME is used over SERIALIZE-NAME. If there is only SERIALIZE-NAME, that is used as XML-NODE-NAME.
Forgot to mention that his is a runtime warning issued during WRITE-XML()
hi,
changing to XML-NODE-NAME "Value2" worked fine .
DEFINE TEMP-TABLE Value1 NO-UNDO
NAMESPACE-PREFIX "" XML-NODE-NAME "Value1" SERIALIZE-NAME "Value1"
FIELD Value1_Text AS DECIMAL
XML-DATA-TYPE "decimal"
XML-NODE-NAME "Value1_Text"
XML-NODE-TYPE "TEXT"
SERIALIZE-NAME "Value1_Text"
FIELD Height_id AS RECID
XML-DATA-TYPE "long"
XML-NODE-NAME "Height_id"
XML-NODE-TYPE "HIDDEN"
SERIALIZE-NAME "Height_id"
FIELD Altitude_id AS RECID
XML-DATA-TYPE "long"
XML-NODE-NAME "Altitude_id"
XML-NODE-TYPE "HIDDEN"
SERIALIZE-NAME "Altitude_id".
DEFINE TEMP-TABLE Value2 NO-UNDO
NAMESPACE-PREFIX "" XML-NODE-NAME "Value2" SERIALIZE-NAME "Value2"
FIELD Value2_Text AS DECIMAL
XML-DATA-TYPE "decimal"
XML-NODE-NAME "Value2_Text"
XML-NODE-TYPE "TEXT"
SERIALIZE-NAME "Value2_Text".
DEFINE DATASET newvalue for value1, value2.
create value1.
create value2.
dataset newvalue:write-xml("file","test.xml",true,?,?,?,?).
Thx Robin, I will have to check if this has any impect. This part of a rather large and complex xml could be possible to remove. It is not possible to change name, so if the xml-write overwrite the value2 with value1, I will need to rethink how to do this.
It is only this part that gives me "problem" and it is a warning....
It it a bad xml practice to build xml that has this kind of layout?
No, it is not bad practice. The issue is with READ-XML() and knowing which temp-table the XML is meant for.