19 declare(strict_types=1);
    63         $set = $this->scaffold_provider->set();
    64         $root_element = $set->
getRoot();
    66         if ($xml->getName() !== $root_element->getDefinition()->name()) {
    67             throw new \ilMDXMLException(
    68                 $xml->getName() . 
' is not the correct root element, should be ' .
    69                 $root_element->getDefinition()->name()
    73         $this->prepareAddingSubElementsFromXML(
    76             $this->dictionary->tagForElement($root_element, $version),
    83     protected function prepareAddingSubElementsFromXML(
    91             throw new \ilMDXMLException(
'LOM XML is nested too deep.');
    94         if ($tag?->isExportedAsLangString()) {
    99         $children_and_attributes = new \AppendIterator();
   100         if (!empty($children = $xml->children())) {
   101             $children_and_attributes->append($children);
   103         if (!empty($attributes = $xml->attributes())) {
   104             $children_and_attributes->append($attributes);
   107         foreach ($children_and_attributes as $child_or_attrib_xml) {
   109                 $this->scaffold_provider,
   110                 $child_or_attrib_xml->getName(),
   112             if (is_null($sub_scaffold)) {
   116             $sub_tag = $this->dictionary->tagForElement($sub_scaffold, $version);
   117             if ($sub_tag?->isOmitted()) {
   122                 $sub_scaffold->getDefinition(),
   124                 (string) $child_or_attrib_xml
   126             $sub_scaffold->mark($this->marker_factory, Action::CREATE_OR_UPDATE, $sub_value);
   128             $this->prepareAddingSubElementsFromXML(
   132                 $child_or_attrib_xml,
   143         $string_xml = $xml->string;
   144         $language_xml = $string_xml->attributes()->language;
   146         if (!empty($string_xml) && ((
string) $string_xml) !== 
'') {
   148                 $this->scaffold_provider,
   151             $string_element->mark(
   152                 $this->marker_factory,
   153                 Action::CREATE_OR_UPDATE,
   155                     $string_element->getDefinition(),
   156                     $this->dictionary->tagForElement($string_element, $version),
   162         if (!empty($language_xml)) {
   164                 $this->scaffold_provider,
   167             $language_element->mark(
   168                 $this->marker_factory,
   169                 Action::CREATE_OR_UPDATE,
   171                     $language_element->getDefinition(),
   172                     $this->dictionary->tagForElement($language_element, $version),
   173                     (string) $language_xml
   184         $value = strip_tags($value);
   186         if ($tag?->isTranslatedAsCopyright()) {
   187             return $this->copyright_handler->copyrightFromExport($value);
   195                 if ($value === 
'none') {
   201             case Type::VOCAB_SOURCE:
   202             case Type::VOCAB_VALUE:
   204             case Type::NON_NEG_INT: