如何从例如
更改xml的外观= IF(A5 =< 8, B5 * .07, IF(A5 > 8 AND A5 =< 15, B5 * .05, IF(A5 > 15 AND A5 < 20, B5 * .03, 00.00)))
看起来像:
<root>
<elem1>
<value>
122
</value>
<text>
This_is_just_a_text
</text>
</elem1>
<elem1>
<value>
122
</value>
<text>
This_is_just_a_text
</text>
</elem1>
</root>
我只是想知道导致这种情况的原因是什么?顺便说一句,下面的方法/函数用于添加缩进!
<root>
<elem1>
<value>122</value>
<text>This_is_just_a_text</text>
</elem1>
<elem1>
<value>122</value>
<text>This_is_just_a_text</text>
</elem1>
</root>
答案 0 :(得分:5)
一个元素将其包含的文本保存在常规str.strip()
中,因此您可以调用import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom
def prettify(elem):
"""
Return a pretty-printed XML string for the Element.
"""
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")
def strip(elem):
for elem in elem.iter():
if(elem.text):
elem.text = elem.text.strip()
if(elem.tail):
elem.tail = elem.tail.strip()
xml = ET.XML('''<elem1>
<value>
122
</value>
<text>
This_is_just_a_text
</text>
</elem1>''')
strip(xml)
print prettify(xml)
来删除不需要的空格。
<?xml version="1.0" ?>
<elem1>
<value>122</value>
<text>This_is_just_a_text</text>
</elem1>
结果:
++
答案 1 :(得分:2)
我正在为那些可能有一天会遇到同样问题的人写这个答案。
这里我发现了什么!对于python2.7.3之前的所有python版本,内置方法toprettyxml()实际上存在一个错误,这个错误导致在xml输出中添加了冗余空格和新行。因此,如果你有python 2.7.3或更高版本你可以使用问题中提供的prettify()方法,你不应该看到任何额外的行或空格,但如果你使用的是旧版本,那么这里有一种解决方法使用“正则表达式”:
def prettify(elem):
"""
Return a pretty-printed XML string for the Element.
"""
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
uglyXml = reparsed.toprettyxml(indent="\t")
pattern = re.compile('>\n\s+([^<>\s].*?)\n\s+</', re.DOTALL)
return pattern.sub('>\g<1></', uglyXml)