[xsde-users] Using polymorphism
Frenk Stih
iknerf.dream at gmail.com
Sun Sep 6 02:17:51 EDT 2015
Hello xsde,
I am starting using you xsde and have also check the forum, but could
not found the issue to my problem.
I am working on linux and using latest 3.2.0 xsde version.
I have created parser with the following scheme
<xs:complexType name="MsgHeader">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="HDR" type="Header" />
</xs:sequence>
</xs:complexType>
<xs:element name="MsgHdr" type="MsgHeader"/>
<!-- ACK.R01 Message [6.2] ================================================ -->
<xs:complexType name="MsgAcknowledgement">
<xs:complexContent>
<xs:extension base="MsgHeader">
<xs:sequence>
<xs:element name="ACK" type="Acknowledgement"
/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ACK.R01" type="MsgAcknowledgement"
substitutionGroup="MsgHdr" />
and using xsde options:
--cxx-hybrid --generate-parser --generate--aggregate
--generate-polymorphic --root-element MsgHdr --polymorphic-type MsgHdr
I then try to use the MsgHdr_paggr and could parse just HDR xml
messages. In the paggr there is also no pre() method? Is this ok,
because when I have read your online help and polymorphic example the
pre() should exists. I then tried to work on pimpl only and
MsgHeader_pimpl can also parse only HDR xml message, even if I set
polymorphic to true and use parsers_map.
Everything is fine when parsing the MsgHeader message, but when trying
to parse the MsgAcknowledgement message I always get an error in the
part starting <ACK>:
<?xml version="1.0" encoding="UTF-8"?>
<ACK.R01>
<HDR>
<HDR.control_id V="4001"/>
<HDR.version_id V="POCT1"/>
<HDR.creation_dttm V="2001-11-01T16:30:01-0800"/>
</HDR>
<ACK> <-- Here I get error "unexpected element encountered"
<ACK.type_cd V="AA"/>
<ACK.ack_control_id V="10001"/>
</ACK>
</ACK.R01>
I can parse this message if I use MsgAcknowledgement_pimpl, so I
assume the parser is ok.
The example code I am working:
MsgHeader_pimpl hello_p;
MsgAcknowledgement_pimpl ack_p;
xml_schema::parser_map_impl p_map(3);
p_map.insert(hello_p);
p_map.insert(ack_p);
std::cout << "test parsing POCT message" << std::endl;
xml_schema::document_pimpl doc_p(hello_p,
"MsgHdr",
true );
std::cout << "test calling pre() of XSDe parser" << std::endl;
hello_p.pre ();
std::cout << "test perform parse()" << std::endl;
doc_p.parse (argv[1]);
Did I miss something?
Thanks for any advice, Frenk
More information about the xsde-users
mailing list