45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何格式化XML文件为缩进样式?

如何格式化XML文件为缩进样式?

2016-09-09 06:47:07 来源:www.45fan.com 【

如何格式化XML文件为缩进样式?

虽然Powerbuilder从9.0开始提供对XML文件的操作,但本人一直用8.0作为主要的开发工具,所以操作XML时只能通过OLE调用DOM控件。使用Microsoft.XMLDOM直接导出(SaveAs)的XML文件没有缩进,用写字板打开时全部挤在第一行,不好编辑;关键在于后续的开发中由于超长的“一行”数据,导致了错误。后来,在互联网上振翅的蝴蝶的blog上看到了格式化缩进XML文档,有现成的代码格式化XML文档。稍作改动,美化了XML,如下:

//==============================================================================

// 函数: uvo_ysjk::uf_format_xml()

//------------------------------------------------------------------------------

// 描述: 格式化XML文件

//------------------------------------------------------------------------------

// 参数:

//valuestringas_fileXML文件名

//------------------------------------------------------------------------------

// 返回值: 成功返回'',失败返回非空字符串。

//------------------------------------------------------------------------------

// 作者:blackeys日期: 2006年12月04日

//------------------------------------------------------------------------------

// 修改历史:

//1、2006年12月04日 创建

//------------------------------------------------------------------------------

// ××××开发组

//==============================================================================

String ls_err,ls_xmlfile

Int i,li_rtn

ls_xmlfile = as_file

oleobject xmldoc,rdr,wrt

xmldoc = CREATE oleobject

li_rtn = xmldoc.ConnectToObject('microsoft.xmldom')

IF li_rtn <> 0 THEN li_rtn = xmldoc.ConnectToNewObject("Microsoft.XMLDOM")

IF li_rtn <> 0 THEN

DESTROY xmldoc

RETURN '调用microsoft.xmldom失败!'

END IF

xmldoc.async = FALSE

xmldoc.load(ls_xmlfile)

IF xmldoc.parseError.errorCode <> 0 THEN

DESTROY xmldoc

RETURN '解析错误'+ ls_err

END IF

rdr = CREATE oleobject

li_rtn = rdr.ConnectToObject('MSXML2.SAXXMLReader')

IF li_rtn <> 0 THEN li_rtn = rdr.ConnectToNewObject("MSXML2.SAXXMLReader")

IF li_rtn <> 0 THEN

DESTROY xmldoc

DESTROY xmldoc

RETURN '调用MSXML2.SAXXMLReader失败!'

END IF

wrt = CREATE oleobject

li_rtn = wrt.ConnectToObject('MSXML2.MXXMLWriter')

IF li_rtn <> 0 THEN li_rtn = wrt.ConnectToNewObject("MSXML2.MXXMLWriter")

IF li_rtn <> 0 THEN

DESTROY xmldoc

DESTROY rdr

DESTROY wrt

RETURN '调用MSXML2.MXXMLWriter失败!'

END IF

String xmlHeader,xmlBody

xmlHeader=xmldoc.childNodes[0].xml; //在开始解析前保存xml头

wrt.indent = true;

rdr.contentHandler = wrt;

rdr.parse(xmldoc);

xmldoc.loadXML(wrt.output);

long xmlChildLength

xmlChildLength=xmldoc.childNodes.length;

xmlBody='';

for i = 1 to xmlChildLength - 1

xmlBody = xmlBody + xmldoc.childNodes[i].xml;

if mod(i,100) = 0 then //DOM需要占用大量内存,PB调用时更为如此,所以循环做垃圾回收

GarbageCollect ( )

end if

next

xmldoc.loadXML(xmlHeader + xmlBody);

xmldoc.save(ls_xmlfile);

DESTROY xmldoc

destroy rdr

destroy wrt

RETURN ''

 

本文地址:http://www.45fan.com/a/question/73816.html
Tags: 文件 XML 格式化
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部