我试图读取XML文件到蟒蛇,拔出从XML文件中的某些元素,然后将结果写回XML文件(所以基本上是没有几个元素的原始XML文件)。当我使用.removeChild(源)它消除我想删除个别元素,但留下的空白代替它使文件十分不可读。我知道我还可以分析所有的空格的文件,但有些时候我需要手动改变某些元素的属性值倍,就很难(和annyoing)来做到这一点。我可以用手肯定删除空格,但是这不是真的可行的,如果我有几十个,这些XML文件。

有没有办法做到.removeChild并将其移除空白呢?

下面就是我的代码如下:

dom=parse(filename)
main=dom.childNodes[0]
sources = main.getElementsByTagName("source")
for source in sources :
    name=source.getAttribute("name")
    spatialModel=source.getElementsByTagName("spatialModel")
    val1=float(spatialModel[0].getElementsByTagName("parameter")[0].getAttribute("value"))
    val2=float(spatialModel[0].getElementsByTagName("parameter")[1].getAttribute("value"))
    if angsep(val1,val2,X,Y)>=ROI :
        main.removeChild(source)
    else:
        print name,val1,val2,angsep(val1,val2,X,Y)
f=open(outfile,"write")
f.write("<?xml version=\"1.0\" ?>\n")
f.write(dom.saveXML(main))
f.close()

感谢很多的帮助。

有帮助吗?

解决方案 2

我无法弄清楚如何使用xml.dom.minidom做到这一点,所以我就写了一个快速功能输出文件的读取和删除所有的空行,然后改写到一个新的文件:

f = open(xmlfile).readlines()
w = open('src_model.xml','w')
empty=re.compile('^$')
for line in open(xmlfile).readlines():
    if empty.match(line):
        continue
    else: 
        w.write(line)

这工作不够好,对我来说:)

其他提示

如果你有安装的PyXML可以使用xml.dom.ext.PrettyPrint()

...用于搜索PPL:

这个有趣的片段

skey = lambda x: getattr(x, "tagName", None)
mainnode.childNodes = sorted( 
  [n for n in mainnode.childNodes if n.nodeType != n.TEXT_NODE],
  cmp=lambda x, y: cmp(skey(y), skey(x)))

删除所有文本节点(并且,也通过标记名反向排序它们)。

即。你可以(递归)做tr.childNodes = [recurseclean(n) for n in tr.childNodes if n.nodeType != n.TEXT_NODE]删除所有文本节点

或者你可能要像做… if n.nodeType != n.TEXT_NODE or not re.match(r'^[:whitespace:]*$', n.data, re.MULTILINE)(我以前不尝试,一个我自己),如果你需要用一些数据文本节点。或更复杂的东西留下的文字特定标签内。

之后tree.toprettyxml(…)将返回格式良好的XML文本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top