我可以用lxml创建这个XML文件吗?

时间:2014-12-08 03:27:07

标签: python xml lxml

我试图生成一个看起来完全像这样的xml:

<?xml version="1.0" encoding="utf-8"?>
<XML type="formats" version="4">
  <format type="format" uid="BEAUTY:MasterBeauty">
    <type>video</type>
    <channelsDepth type="uint">16</channelsDepth>
    <channelsEncoding type="string">Float</channelsEncoding>
    <channelsEndianess type="string">Little Endian</channelsEndianess>
    <fieldDominance type="int">2</fieldDominance>
    <height type="uint">1080</height>
    <nbChannels type="uint">4</nbChannels>
    <pixelLayout type="string">ABGR</pixelLayout>
    <pixelRatio type="float">1</pixelRatio>
    <rowOrdering type="string">up</rowOrdering>
    <width type="uint">1920</width>
  </format>
</XML>

它是VFX节点工作流脚本集合的一部分,该文件是&#34;读取媒体的一部分&#34;节点。 我花了整整一周的时间看着很多不同的东西,但却找不到与此有关的东西。我选择lxml作为漂亮的印刷品。我能够生成一堆其他更简单的(对我来说)xml文件但是对于这个,我得说...我迷失了。到目前为止完全失败! 有人可以对此有所了解吗?

我的问题: - lxml适合这个吗? - 如果不是,什么是更好的选择? (我确实在寻找ElementTree的例子,没有运气!) - 如果是的话,我从哪里开始?有人可以分享一段代码让我开始吗?

到目前为止我能创造的是这样的事情:

import os, sys
import lxml.etree
import lxml.builder as lb
from lxml import etree 

E = lxml.builder.ElementMaker()
Setup = E.Setup
Base = E.Base
Version = E.Version
Note = E.Note
Expanded = E.Expanded
ScrollBar = E.ScrollBar
Frames = E.Frames
Current_Time = E.Current_Time
Input_DataType = E.Input_DataType
ClampMode = E.ClampMode
AdapDegrad = E.AdapDegrad
UsedAsTransition = E.UsedAsTransition
State = E.State


root_node = Setup(
        Base(
            Version('12.030000'),
            Note(''),
            Expanded('False'),
            ScrollBar('0'),
            Frames('0'),
            Current_Time('1'),
            Input_DataType('3'),
            ClampMode('0'),
            AdapDegrad('False'),
            UsedAsTransition('False')
            ),
        State(),
                  )
print lxml.etree.tostring(root_node, pretty_print=True)

str = etree.tostring(root_node, pretty_print=True)

myXMLfile = open('/Users/stefan/XenDRIVE/___DEV/PYTHON/Create_xlm/create_Batch_xml_setups/result/xml_result/root.root_node.xml', 'w')
myXMLfile.write(str)
myXMLfile.close()

希望那些是可以接受的&#34;的问题。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

首先,创建format节点,然后将其添加到根XML节点。

示例代码(按照它创建更多节点):

from lxml import etree
from lxml.builder import ElementMaker

E = ElementMaker()

format = E.format(
    E.type("video"),
    E.channelsDepth("16", type="uint"),
    # create more elements here        

    type="format",
    uid="BEAUTY:MasterBeauty"
)
root = E.XML(
    format,

    type="formats",
    version="4"
)

print(etree.tostring(root, xml_declaration=True, encoding='utf-8', pretty_print=True))

打印:

<?xml version='1.0' encoding='utf-8'?>
<XML version="4" type="formats">
  <format type="format" uid="BEAUTY:MasterBeauty">
    <type>video</type>
    <channelsDepth type="uint">16</channelsDepth>
  </format>
</XML>