我使用Python
创建XML
文件。
我的代码是:
rough_string = ET.tostring(CanDef, 'utf-8') #CanDef is my main Element
reparsed = minidom.parseString(rough_string)
XmlFile = reparsed.toprettyxml()
我对此代码的看法是:
<CanDef>
<CanDB>
<Msg CallBack="NULL" Can="0" DLC="3" Dir="tx" ID="273" MsgName="Frm0x111">
<Signal Can="0" Dir="tx" Len="8" Max="1" Min="-1" MsgName="Frm0x111" Offset="1" Pos="1" Reso="127.5" SigName="myCos"/>
<Signal Can="0" Dir="tx" Len="8" Max="1" Min="-1" MsgName="Frm0x111" Offset="1" Pos="2" Reso="127.5" SigName="mySin"/>
<Signal Can="0" Dir="tx" Len="8" Max="255" Min="0" MsgName="Frm0x111" Offset="0" Pos="3" Reso="1" SigName="myAdd"/>
</Msg>
</CanDB>
我想要的是:
<?xml version="1.0"?>
<CanDef>
<CanDB>
<Msg
Can="0"
MsgName="Frm0x111"
ID="273"
Dir="tx"
DLC="3"
CallBack="NULL"
>
<Signal
Can="0"
MsgName="Frm0x111"
Dir="tx"
SigName="MyCos"
Pos="1"
Len="8"
Min="-1"
Max="1"
Offset="1"
Reso="127.5"
/>
<Signal
Can="0"
MsgName="Frm0x111"
Dir="tx"
SigName="MySin"
Pos="2"
Len="8"
Min="-1"
Max="1"
Offset="1"
Reso="127.5"
/>
<Signal
Can="0"
MsgName="Frm0x111"
Dir="tx"
SigName="MyAdd"
Pos="3"
Len="8"
Min="0"
Max="255"
Offset="0"
Reso="1"
/>
</Msg>
</CanDef>
</CanDB>
是否可以使用toprettyxml
获取第二个解决方案?
因为我找到了关于indent
和newl
(newLine)的内容,但即使我更改了缩进和新参数,它看起来也是第一个解决方案的时间...
最诚挚的问候 嘉
答案 0 :(得分:1)
toprettyxml功能不支持,但您可以使用此功能获得所需内容:
overflow:auto
您将得到您所需要的一切。
如果未设置xml格式,另一个选项是用元素替换属性,例如:
import re
def toevenprettierxml(xml, indent = ' ', newl = '\n'):
for ind, element in re.findall(r'^(\s*)(\<\w+\s+.+\>)', xml, re.MULTILINE):
even_prettier_element = re.sub(r'\s+', newl + ind + indent, element)
even_prettier_element = re.sub(r'(/?\>)', newl + ind + r'\1', even_prettier_element)
xml = xml.replace(element, even_prettier_element)
return xml