Замечания относительно вашего входного документа:
- Документ определяет пространство имен по умолчанию (
xmlns="..."
) как urn:cablelabs:md:xsd:core:3.0
. - Он определяет то же пространство имен во второй раз, что и " core "(
xmlns:core="urn:cablelabs:md:xsd:core:3.0"
). xmlns:schemaLocation
неверно и должно быть xsi:schemaLocation
. - пространство имен с именем" term "(
urn:cablelabs:md:xsd:terms:3.0
) вообще не используется.
Когда вы читаете этот документ и пишете его снова, как это делает ваш пример кода, вся информация сохраняется.
Но нет никакой гарантии, что выходной документ является символьным. побочная копия входного документа. Это не то, как XML работает, и это необоснованное ожидание. Гарантия, которая имеет значение, заключается в том, что выходной документ семантически эквивалентен входному документу.
Когда Ваш код выполняется, он выдает следующие выходные данные (сокращенно):
<core:ADI3
xmlns:adb="urn:adb:md:xsd:adb:01"
xmlns:content="urn:cablelabs:md:xsd:content:3.0"
xmlns:core="urn:cablelabs:md:xsd:core:3.0"
xmlns:offer="urn:cablelabs:md:xsd:offer:3.0"
xmlns:title="urn:cablelabs:md:xsd:title:3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<core:Asset xsi:type="title:TitleType" uriId="ID" providerVersionNum="5" internalVersionNum="0" creationDateTime="2020-04-22T00:00:00Z" startDateTime="2020-03-24T09:00:00Z" endDateTime="2022-10-06T23:59:00Z">
<core:AlternateId identifierSystem="VOD1.1">ID</core:AlternateId>
<!-- ... -->
</core:Asset>
</core:ADI3>
Элемент ADI3
по-прежнему находится в пространстве имен urn:cablelabs:md:xsd:core:3.0
, как и раньше. Достигается ли это через пространство имен по умолчанию или через явный префикс, не имеет значения. ElementTree знал префикс для этого пространства имен - «ядро» - и решил использовать его. В этом нет ничего плохого, это все то же самое.
Пространство имен urn:cablelabs:md:xsd:terms:3.0
(«термины») отсутствует в выходных данных, поскольку оно не использовалось во входных данных, а хранить неиспользуемые объявления бессмысленно.
То же самое относится и к "schemaLocation" - поскольку вы написали это как объявление пространства имен (xmlns:schemaLocation
), ElementTree увидел, что это "пространство имен" не использовалось, и удалил его. Правильным был бы атрибут с пространством имен (xsi:schemaLocation
). Когда вы исправите эту ошибку, этот элемент останется в выходных данных.
Подведем итог: у вас нет проблем. Выходной документ совпадает.