У меня проблема с скриптом python, который используется для анализа XML-файла. Это файл XML:Python: метод XML-анализа
file.xml
<Tag1 SchemaVersion="1.1" xmlns="http://www.microsoft.com/axe">
<RandomTag>TextText</RandomTag>
<Tag2 xmlns="http://schemas.datacontract.org/2004/07">
<AnotherRandom>Abc</AnotherRandom>
</Tag2>
</Tag1>
Я использую xml.etree.ElementTree
в качестве метода синтаксического анализа. Моя задача - изменить теги между RandomTag
(в данном случае «TextText»). Это код питона:
питон код
import xml.etree.ElementTree as ET
customXmlFile = 'file.xml'
ns = {
'ns': 'http://www.microsoft.com/axe',
'sc': 'http://schemas.datacontract.org/2004/07/Microsoft.Assessments.Relax.ObjectModel_V1'
}
tree = ET.parse(customXmlFile)
root = tree.getroot()
node = root.find('ns:RandomTag', namespaces=ns)
node.text = 'NEW TEXT'
ET.register_namespace('', 'http://www.microsoft.com/axe')
tree.write(customXmlFile + ".new",
xml_declaration=True,
encoding='utf-8',
method="xml")
Я не бежал ошибки времени, код работает отлично, но все пространства имен определены в первом узле (Tag1) и в AnotherRandom
и Tag2
используется shorcut. Кроме того, SchemaVersion удаляется.
file.xml.new - выход
<?xml version='1.0' encoding='utf-8'?>
<Tag1 xmlns="http://www.microsoft.com/axe" xmlns:ns1="http://schemas.datacontract.org/2004/07" SchemaVersion="1.1">
<RandomTag>NEW TEXT</RandomTag>
<ns1:Tag2>
<ns1:AnotherRandom>Abc</ns1:AnotherRandom>
</ns1:Tag2>
</Tag1>
file.xml.new - желаемый результат
<Tag1 SchemaVersion="1.1" xmlns="http://www.microsoft.com/axe">
<RandomTag>TextText</RandomTag>
<Tag2 xmlns="http://schemas.datacontract.org/2004/07">
<AnotherRandom>NEW TEXT</AnotherRandom>
</Tag2>
</Tag1>
Что я должен изменить, чтобы получить точный и тот же формат XML, как в beggining с в что изменился только текст?
Ваш файл XML имеет некоторые проблемы, как это делает ваш код. В соответствии с вашим кодом он выводит код. Если вы можете исправить опечатки, которые помогут нам диагностировать проблему. Отправьте полный рабочий код. Например, ваш словарь ns должен использовать двоеточия и не равнозначные знаки. Также закрытие Tag1 должно иметь косую черту и т. Д. –
Я исправил эти 2 проблемы. Я не могу скопировать весь код xml, потому что он большой. В основном структура такая же, как и эта, и код python, как показано в вопросе. –
Я также считаю, что это должно быть пространство имен, а не пространство имен в вызове find(), уверены ли вы, что больше нет опечаток? Как насчет вашего импорта и т. Д.? Вам действительно нужно убедиться, что копия/вставка должна быть рабочим кодом. Кроме того, какую версию Python вы используете? –