2016-08-01 57 views
0

我想在python中复制一些XML代码以将其放入我目前正在处理的程序中,该程序会执行一些全景捕获。最后,想法是导出捕获细节的XML文件,以便更容易地导入各种全景捕获程序之一。python查询中的xml子元素

我对Python相当新,但一直在使用xml.etree.ElementTree,与此我可以设置信息,如根声明和标题和子标题,但我有点失去了两点,第一个是如何通过一个子元素,我可以设置一个值(如GPS),第二个是如何一个子元素可以有多个值(例如马赛克/重叠最小值)。

对于我有以下工作的元素;

root = etree.Element("papywizard") 
root.set("version", "c") 
header = etree.SubElement(root,"header") 
general = etree.SubElement(header, "general") 
title = etree.SubElement(general,"title") 

我当时以为我可以做这样的事情title.text("Test123")但这并没有工作。我正在尝试复制的完整XML如下,是否有人能够指引我如何在子元素标记中设置文本,以及除了可以将多少个标记聚合为一个子元素?

非常感谢!

<?xml version="1.0" encoding="utf-8"?> 
<papywizard version="c"> 
    <header> 
     <general> 
      <title> 
       Test Capture 1 
      </title> 
      <gps> 
       37.8022697,-122.4056749 
      </gps> 
      <comment> 
       Add your comments here 
      </comment> 
     </general> 
     <shooting mode="mosaic"> 
      <headOrientation> 
       up 
      </headOrientation> 
      <cameraOrientation> 
       landscape 
      </cameraOrientation> 
      <stabilizationDelay> 
       5.0 
      </stabilizationDelay> 
      <counter> 
       001 
      </counter> 
      <startTime> 
       2014-02-23_13h59m01s 
      </startTime> 
      <endTime> 
       2014-02-23_13h53m33s 
      </endTime> 
     </shooting> 
     <camera> 
      <timeValue> 
       5.0 
      </timeValue> 
      <bracketing nbPicts="1"/> 
      <sensor coef ="4.74" ratio="4:3"/> 
     </camera> 
     <lens type="rectilinear"> 
      <focal> 
       12.7 
      </focal> 
     </lens> 
     <mosaic> 
      <nbPicts pitch="5" yaw="10"/> 
      <overlap minimum="0.25" pitch="0.25" yaw="0.25"/> 
     </mosaic> 
    </header> 
    <shoot> 
     <pict bracket="1" id="1"> 
      <time> 
       2014-02-23_13h59m01s 
      </time> 
      <position pitch="37.96" roll="0.0" yaw="-99.96"/> 
     </pict> 
     <pict bracket="1" id="2"> 
      <time> 
       2014-02-23_13h59m01s 
      </time> 
      <position pitch="18.98" roll="0.0" yaw="-99.96"/> 
     </pict> 
     <pict bracket="1" id="3"> 
      <time> 
       2014-02-23_13h59m01s 
      </time> 
      <position pitch="0.00" roll="0.0" yaw="-99.96"/> 
     </pict> 
    </shoot> 
</papywizard> 

回答

2
import xml.etree.ElementTree as ET 

root = ET.Element("papywizard") 
root.set("version", "c") 
header = ET.SubElement(root,"header") 
general = ET.SubElement(header, "general") 
title = ET.SubElement(general,"title") 
title.text = str('Test123') # This is how you set it 

tree = ET.ElementTree(root) # This step will form a tree 
tree.write('expected.xml') # This step will save the xml file. 
1

您必须使用以下命令:

title.text = "some text" 
1

文本节点和元素节点两种节点和XML元素节点可以在任何任意数量的文本和/或元素的子节点订购。

如果你想添加文本节点,你可以用.text属性做

title.text = "Sometext" 

如果你想添加的属性,你可以用set命令

title.set('Attribute name', 'Attributevalue') 
+0

感谢所有人的帮助,每个答案完美无缺:)。非常感谢! – user1829564