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

标签 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 节点工作流程脚本集合的一部分,并且此文件是“读取媒体”节点的一部分。 我整整一周都在研究许多不同的东西,但找不到与此相近的东西。我选择 lxml 作为 pretty-print 。我能够生成一堆其他更简单(对我而言)的 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()

希望这些是“可接受的”问题。 提前感谢您的帮助。

最佳答案

首先,制作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>

关于python - 我可以用 lxml 创建这个 XML 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350943/

相关文章:

python - <head> 中的 lxml 和 <noscript>

xml - *您*如何在 Web 应用程序的世界中使用 XML?

c# - 如何正确解析具有任意 namespace 的 XML 文档

python - 如何使用 Python LXML 重命名节点?

python - 如何使用 lxml 更新 XML 文件

xml - Xpath 寻找属性

python - 如何根据列值从 DataFrame 中选择行?

python - TensorFlow ExportOutputs、PredictOuput 并指定 signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY

python - Reportlab - 饼图填充颜色

python - Selenium ElementNotVisibleException : Message: element not interactable