Как создать шаблон XML?

1

У меня есть 2 скрипта Python, которые записываются в один и тот же файл XML. Я использую Python2.5 и WinXP. Как создать шаблон, чтобы файл XML не был перезаписан при запуске другого Python script. Он только обновит раздел в XML со значением. Например: XML-шаблон, как показано ниже:

<Test>
 <Default>
   <Value>1</Value> 
   <Link_Status>0</Link_Status> 
   <Lane_Status>1</Lane_Status> 
 </Default>
 <Settings>
  <Point>4</Point> 
  <Delay>1</Delay> 
 </Settings>
</Test>

я хочу, чтобы default.py обновлялся до раздела Default и Settings.py, чтобы обновить раздел настроек. оцените ваш совет. TQ

Код по умолчанию .py:

import elementtree.ElementTree as ET 

root=ET.Element("Test")
head1=ET.SubElement(root,"Default")
title=ET.SubElement(head1,"Value")
title.text="1"

title=ET.SubElement(head1,"Link_Status")
title.text="0"

title=ET.SubElement(head1,"Lane_Status")
title.text="1"

tree=ET.ElementTree(root)
tree.write("C:\Python25\myscript\cmm\\config.xml")

Код Settings.py:

import elementtree.ElementTree as ET

root=ET.Element("Test")
head2=ET.SubElement(root,"Settings")
title=ET.SubElement(head2,"Point")
title.text=("4")

title=ET.SubElement(head2,"Delay")
title.text=("1")

tree=ET.ElementTree(root)
tree.write("C:\Python25\myscript\cmm\\config.xml")
  • 0
    Пожалуйста, отформатируйте ваш исходный код правильно!
  • 1
    извините за дисплей. не знал, как разместить только сейчас. теперь я изучил это и отредактировал регистрацию. :)
Показать ещё 2 комментария
Теги:
templates

1 ответ

1

Прочитайте и просто обновите конкретный раздел вместо всего файла, например ниже

from xml.etree import ElementTree as ET
with open("test.xml") as f:
    root = ET.parse( f ).getroot()

# update <Default>
root.remove( root.find("./Default") )

defaultNode = ET.SubElement(root,"Default")
ET.SubElement(defaultNode,"Value").text = "999"
ET.SubElement(defaultNode,"Link_Status").text = "888"
ET.SubElement(defaultNode,"Lane_Status").text = "777"

with open("test.xml" , "w" ) as f:
    f.write( ET.tostring( root ) )

---- РЕДАКТИРОВАТЬ ДОБАВИТЬ НОВОЕ -

На самом деле, я просто хочу показать вам, как вы можете просто читать в файле и обновлять какой-то раздел, а затем записывать их без необходимости создавать новый xml-контент каждый раз. Хорошо, если ваша структура xml статична, вы можете просто обновить конкретный текст, разместив его с помощью XPATH, возможно, следующий может решить ваши небольшие проблемы.

from xml.etree import ElementTree as ET
with open("test.xml") as f:
root = ET.parse( f ).getroot()

# update <Default>
root.find("./Default/Value").text = "999"
root.find("./Default/Link_Status").text = "888"
root.find("./Default/Lane_Status").text = "777"

with open("test.xml" , "w" ) as f:
    f.write( ET.tostring( root ) )

BTW,
Что касается первого примера, если я не удаляю перед добавлением нового, вы получите два node, поэтому я сначала использую удаление, чтобы удалить старый и создать новый.

  • 0
    привет отлично это похоже на работу! Не могли бы вы объяснить, что означает код строки root.remove? root find - найти слово по умолчанию, но почему root.remove означает? TQ
  • 0
    я также заметил, что каждый раз, когда я запускаю скрипт, последнее обновление в xml будет происходить внизу. Например: если я запускаю Default.py, он обновит раздел Default XML в нижней части. Настройки будут в верхней части XML. Когда я запускаю Settings.py, то раздел «Настройки» появится внизу, а «По умолчанию» - вверху. Есть ли способ предотвратить это, т.е. исправить это по умолчанию сверху и настройки внизу. TQ
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню