2525
2626import geopandas as gpd
2727from affine import Affine
28- from dicttoxml import dicttoxml
2928from lxml import etree
3029from rasterio import CRS , transform
3130from sertit import files , path , vectors
@@ -409,6 +408,8 @@ def _read_mtd(self) -> (etree._Element, dict):
409408
410409 # MTD are JSON
411410 try :
411+ from dict2xml import dict2xml
412+
412413 try :
413414 mtd_file = next (self .path .glob (f"{ self .name } .json" ))
414415 self ._has_stac_mtd = True
@@ -425,7 +426,17 @@ def _read_mtd(self) -> (etree._Element, dict):
425426 ) from ex
426427
427428 data = files .read_json (mtd_file , print_file = False )
428- root = etree .fromstring (dicttoxml (data ))
429+
430+ def __sanitize_recursive (d ):
431+ for key in d .copy ():
432+ k = key .split (":" )[- 1 ]
433+ d [k ] = d .pop (key )
434+ if isinstance (d [k ], dict ):
435+ __sanitize_recursive (d [k ])
436+
437+ data .pop ("assets" , None )
438+ __sanitize_recursive (data )
439+ root = etree .fromstring (dict2xml (data , wrap = "all" ))
429440 except etree .XMLSyntaxError as exc :
430441 raise InvalidProductError (
431442 f"Cannot convert metadata to XML for { self .path } !"
@@ -493,7 +504,7 @@ def get_orbit_direction(self) -> OrbitDirection:
493504 if self ._has_stac_mtd :
494505 root , _ = self .read_mtd ()
495506
496- ob = root .findtext (".//key[@name='sat: orbit_state'] " )
507+ ob = root .findtext (".//orbit_state" )
497508 ob = OrbitDirection .from_value (ob .upper ())
498509
499510 if ob is None :
0 commit comments