+ -
当前位置:首页 → 问答吧 → python生成xml,信息头怎么独立成一行?

python生成xml,信息头怎么独立成一行?

时间:2011-02-28

来源:互联网

在用python的dom生成xml的过程中,可以设置indent,但是我发现要么全部都换行:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
  <maxid>
  4
  </maxid>
</catalog>

我希望<maxid>4</maxid>在同一行。如果不设置indent,自己插入换行符,但是无法插入到第一个,因此信息头和第一个<catalog>在同一行:
<?xml version="1.0" encoding="utf-8"?><catalog>
  <maxid>4</maxid>
</catalog>

需要怎么做才能让信息头独立一行?

作者: politeness1983   发布时间: 2011-02-28

贴下你的代码看看。

作者: iambic   发布时间: 2011-02-28

Python code

import sys
from xml.dom.minidom import parse
from xml.dom.minidom import Document
import xml.dom.minidom

def main(args):
    fileContent = Document()
    element_catalog = fileContent.createElement("catalog")
    fileContent.appendChild(element_catalog)
    element_maxid = fileContent.createElement("maxid")
    element_catalog.appendChild(element_maxid)
    element_str = fileContent.createTextNode("4")
    element_maxid.appendChild(element_str)
    fileContent.toprettyxml()
    
    text1 = fileContent.createTextNode('\n' + '\t')
    element_maxid.parentNode.insertBefore(text1, element_maxid)
    text2 = fileContent.createTextNode('\n')
    element_catalog.appendChild(text2)
    
    filehandler = open("/local/tmp/a.xml", 'w')
    fileContent.writexml(filehandler)
    filehandler.close()
    

    
if __name__ == "__main__":
    main(sys.argv)

作者: politeness1983   发布时间: 2011-02-28

结果是:

<?xml version="1.0" ?><catalog>
<maxid>4</maxid>
</catalog>

作者: politeness1983   发布时间: 2011-02-28

结果是:

<?xml version="1.0" ?><catalog>
  <maxid>4</maxid>
</catalog>

作者: politeness1983   发布时间: 2011-02-28

贴代码最好贴能运行通过的代码。像你这段代码还要去读文件,文件又没贴出来,虽然问题不大,对于读者来说,终究是不便。最好直接把xml放到代码里。

作者: iambic   发布时间: 2011-02-28

不需要读文件啊,是写文件。这个是可以直接运行的,只要改一下文件路径

作者: politeness1983   发布时间: 2011-02-28

看了下我以前写过的代码,意外的发现我以前遇到过同样的问题。我当时的解决方案是手动再处理下:

Python code
import sys
from xml.dom.minidom import Document
import re

def main(args):
    doc = Document()
    element_catalog = doc.createElement("catalog")
    doc.appendChild(element_catalog)
    element_maxid = doc.createElement("maxid")
    element_catalog.appendChild(element_maxid)
    element_str = doc.createTextNode("4")
    element_maxid.appendChild(element_str)
    print re.sub(r'(<[^/][^<>]*[^/]>)\s*([^<>]{,40}?)\s*(</[^<>]*>)', r'\1\2\3', doc.toprettyxml())

if __name__ == "__main__":
    main(sys.argv)


另外,楼主的命名风格感觉不太好,特别是那个fileContent,既不利于拼写,也不能如实表达内容,让人看了以为是个字符串。

作者: iambic   发布时间: 2011-02-28

doc.toprettyxml()可以加个参数indent=" "。

作者: iambic   发布时间: 2011-02-28

热门下载

更多