Handling a Document with Multiple Tags with the Same Name
Handling a Document with Multiple Tags with the Same Name
A given element in XML can contain multiple elements that have the same name; these elements are distinguished from each other by their order. For example, the following is a legitimate XML document:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Person>
<Name>Able, Andrew</Name>
<DOB>1977-10-06</DOB>
<Address>
<Street>6218 Clinton Drive</Street>
<City>Reston</City>
<State>TN</State>
<Zip>87639</Zip>
</Address>
<Address>
<Street>110 High Street</Street>
<City>Zanesville</City>
<State>OR</State>
<Zip>80719</Zip>
</Address>
</Person>
</Root>
It is slightly tricky to map such a document to an InterSystems IRIS class, because each class property must have a unique name.
To map such a document to an InterSystems IRIS class, do the following:
-
Set the XMLNAME property parameter as needed to map different class properties to the same XML name.
-
Set the XMLSEQUENCE class parameter equal to 1. As a precaution, this ensures that the mapping respects the order of the properties as listed in the class definition.
-
Make sure that the properties are listed in the class definition in the same order as in the XML document.
For example, consider the following class definition:
Class GXML.TestSequence.Person Extends (%Persistent, %XML.Adaptor)
{
Property Name As %Name [ Required ];
Property DOB As %Date(FORMAT = 5, MAXVAL = "+$h") [ Required ];
Property HomeAddress As GXML.TestSequence.Address(XMLNAME = "Address");
Property WorkAddress As GXML.TestSequence.Address(XMLNAME = "Address");
/// If the XMLSEQUENCE = 1, then the order of the XML elements must match the
/// order of the class properties. This allows us to deal with XML where the
/// same field appears multiple times and is distinguished by the order.
Parameter XMLSEQUENCE = 1;
}
This class definition maps to the XML document shown previously.
If XMLSEQUENCE is 1, the XMLIGNOREINVALIDTAG parameter is ignored.