У меня есть следующая строка XML, сгенерированная в коде. Я попытался проанализировать эту строку XML с помощью LXML:
taskMetaDataXmlDoc = etree.fromstring(ta.GetXMLString())
где ta.GetXMLString() возвращает следующую строку XML ниже:
<TaskMetadata xmlns:xlink = "http://www.w3.org/2000/xmlns/" seqid = "27152" id = "27152-SSP" uniqueid = "0be1d3a2-bdb9-4896-a2c8-802ed0c64def">
<Status>Published</Status>
<AssignedBy/>
<AssignedTo/>
<ContentReceived>
<DateReceived>2023-02-04T06:28:48.0000000+08:00</DateReceived>
<Remarks/>
</ContentReceived>
<Title>[TEST TITLE]</Title>
<Category xlink:href = "Content.xml#r1c1" xlink:type = "locator"/>
<ContentMetadata xlink:href = "0be1d3a2-bdb9-4896-a2c8-802ed0c64def-c.xml" xlink:type = "locator"/>
<HistoryMetadata xlink:href = "0be1d3a2-bdb9-4896-a2c8-802ed0c64def-h.xml" xlink:type = "locator"/>
<References xlink:href = "0be1d3a2-bdb9-4896-a2c8-802ed0c64def-r.xml" xlink:type = "locator"/>
<CreatedDate>2023-02-04T06:28:48.0000000+08:00</CreatedDate>
<CreatedBy>Scheduler</CreatedBy>
<LastModifiedDate>2023-02-04T06:28:48.0000000+08:00</LastModifiedDate>
<LastModifiedBy>Scheduler</LastModifiedBy>
<InitialPublishedBy>Scheduler</InitialPublishedBy>
<InitialPublishedDate>2023-02-04T06:28:48.0000000+08:00</InitialPublishedDate>
<LastPublishedDate>0001-01-01T00:00:00.0000000+08:00</LastPublishedDate>
<FuturePublishedDate>0001-01-01T00:00:00.0000000+08:00</FuturePublishedDate>
<FutureUnpublishedDate>0001-01-01T00:00:00.0000000+08:00</FutureUnpublishedDate>
</TaskMetadata>
Однако программа возвращает ошибку относительно повторного использования пространства имен XMLNS:
XMLSyntaxError: повторное использование имени пространства имен xmlns запрещено, строка 1, столбец 58 (, строка 1)
Я не особенно хорошо разбираюсь в XML, могу ли я узнать, какая часть строки XML вызывает это?





В объявлении пространства имен для xlink у вас есть uri для xmlns:
xmlns:xlink = "http://www.w3.org/2000/xmlns/"
Он должен иметь uri http://www.w3.org/1999/xlink:
xmlns:xlink = "http://www.w3.org/1999/xlink"
ta.GetXMLString() (что бы это ни было) выдает неправильный XML.
Префикс xmlns привязан к имени пространства имен http://www.w3.org/2000/xmlns/. Однако этот префикс не должен быть объявлен в XML-документе, а другие префиксы (например, xlink) не должны быть привязаны к имени пространства имен.
См. https://www.w3.org/TR/REC-xml-names/#ns-decl:
Префикс xmlns используется только для объявления привязок пространства имен и по определению привязан к имени пространства имен
http://www.w3.org/2000/xmlns/. Это НЕ ДОЛЖНО быть объявлено. Другие префиксы НЕ ДОЛЖНЫ быть привязаны к этому имени пространства имен, и оно НЕ ДОЛЖНО быть объявлено как пространство имен по умолчанию. Имена элементов НЕ ДОЛЖНЫ иметь префиксxmlns.
Правильное имя пространства имен для XLink — http://www.w3.org/1999/xlink. Если объявление пространства имен изменить на xmlns:xlink = "http://www.w3.org/1999/xlink", ошибка исчезнет.