An element in a sequence can be declared using the xsd:any keyword to indicate that an element of any type can be present in that position. An example of this type of construct is as follows:
<xsd:complexType name="SeqWithAny"> <xsd:sequence> <xsd:element name="a" type="xsd:string"/> <xsd:any processContents="lax"/> </xsd:sequence> </xsd:complexType>
In this case, the element a is followed by another element with any name and of any type. The processContents="lax" attribute tells a schema processor to do lax validation processing on the element in this position – something that is of no concern to the XBinder compiler.
The generated C type definition for this type is as follows:
typedef struct SeqWithAny { OSXMLSTRING a; OSXMLSTRING _any; } SeqWithAny;
C++ is similar except that the standard class pattern is used:
class SeqWithAny : public OSRTBaseType { public: OSXMLStringClass a; OSXMLStringClass _any; ... } ;
In this case, the compiler has inserted an OSXMLSTRING typed element to represent the any field. This contains a UTF-8 character string containing the complete XML text string value.
An example code snippet that could be used to populate a C variable of this type for encoding is as follows:
const OSUTF8CHAR* anyData = (const OSUTF8CHAR*) "<anyData>this is test data</anyData>"; SeqWithAny testSeq; testSeq.a.value = (const OSUTF8CHAR*)"test string"; testSeq._any.value = anyData; ...