static store::Item_t j2x_array( store::Item_t const &array_item, store::Item *parent_xml_item ) { zstring base_uri; store::NsBindings ns_bindings; store::Item_t array_elt_item, element_name, junk_item, type_name, xml_item; store::Iterator_t i( array_item->getArrayValues() ); i->open(); if ( !i->next( array_elt_item ) ) throw XQUERY_EXCEPTION( zerr::ZJ2X0001_JSONML_ARRAY_BAD_JSON, ERROR_PARAMS( ZED( ZJ2X0001_EmptyArray ) ) ); if ( !array_elt_item->isAtomic() || !TypeOps::is_subtype( array_elt_item->getTypeCode(), store::XS_STRING ) ) throw XQUERY_EXCEPTION( zerr::ZJ2X0001_JSONML_ARRAY_BAD_JSON, ERROR_PARAMS( ZED( ZJ2X0001_Bad1stElement ) ) ); GENV_ITEMFACTORY->createQName( element_name, "", "", array_elt_item->getStringValue() ); type_name = GENV_TYPESYSTEM.XS_UNTYPED_QNAME; GENV_ITEMFACTORY->createElementNode( xml_item, parent_xml_item, element_name, type_name, false, false, ns_bindings, base_uri ); bool did_attributes = false; while ( i->next( array_elt_item ) ) { switch ( array_elt_item->getKind() ) { case store::Item::ARRAY: j2x_array( array_elt_item, xml_item.getp() ); break; case store::Item::ATOMIC: { zstring value_str( array_elt_item->getStringValue() ); GENV_ITEMFACTORY->createTextNode( junk_item, xml_item, value_str ); break; } case store::Item::OBJECT: if ( did_attributes ) throw XQUERY_EXCEPTION( zerr::ZJ2X0001_JSONML_ARRAY_BAD_JSON, ERROR_PARAMS( ZED( ZJ2X0001_UnexpectedObject ) ) ); j2x_object( array_elt_item, &xml_item ); did_attributes = true; break; default: throw XQUERY_EXCEPTION( zerr::ZJ2X0001_JSONML_ARRAY_BAD_JSON, ERROR_PARAMS( ZED( ZJ2X0001_BadElement ), array_elt_item->getKind() ) ); } // switch } // while i->close(); return xml_item; }