大龙的博客

常用链接

统计

最新评论

XML格式化(缩进)输出的方法 ------------- 转

 

1. 网上找了好些都是孟子E章的XSLT方法,地址:http://blog.csdn.net/net_lover/archive/2004/07/27/53601.aspx

2. 本人也不相信没有其他方便的方法进行转换,下面这个方法倒是可以用用,比较简单。不过这个接口说不定在比较低版本的MSXML(Microsoft® XML Core Services)库里面没有呢!这种方法使用的是SAX,一直使用MSXML都是DOM方式,孟子E章介绍的也是DOM。XML直接从SAX方式生成到DOM方式的范例http://msdn.microsoft.com/library/en-us/xmlsdk/html/6139a6fe-7d4c-449d-9e36-60b68be1de71.asp?frame=true

从这个地址:http://msdn.microsoft.com/library/en-us/xmlsdk/html/9e353ac7-ab8b-44aa-9fbc-12ca715ab1e7.asp?frame=true可以看到MSXML版本发展的历史,看来是要MSXML3.0以上才有SAXXMLReader。地址:http://www.99inf.net/Article/netjc/xmlapp/2005-05-24/22932.html
<%
Dim rdr, wrt
set rdr = Server.CreateObject("MSXML2.SAXXMLReader.4.0")
set wrt = Server.CreateObject("MSXML2.MXXMLWriter.4.0")
wrt.indent = True
Set rdr.contentHandler = wrt
''''--------------------------------------------
'''' 可以解析 xml文件、xmlDom对象、xml字符串
'''' rdr.parseURL ("books.xml");
'''' rdr.parse (xmlDoc);
'''' rdr.parse ("<article><author>无心(cuixiping)</author></article>");

''''--------------------------------------------
rdr.parse "<article><author>无心(cuixiping)</author></article>"
response.write ("<xmp>")
'''' 和SAXXMLReader类似output输出也可以为DOMDocument 地址:http://msdn.microsoft.com/library/en-us/xmlsdk/html/5ff0aeb7-02cb-4fe4-ad78-0c48208e0282.asp?frame=true
response.write (wrt.output)
response.write ("</xmp>")
%>
C++ Builder中的使用方法,

感觉不是百发百中,有一些会莫名其妙无法输出,另外一个致命的错误是,默认会给XML加上一个处理信息encoding="UTF-16" standalone="yes",而且是强加的,就算载入的时候是别的encoding,也会变成UTF-16。查找相关资料可能因为是COM里面处理字符串是BSTR的缘故。
    //TCOMISAXXMLReader   i_xmlreader;
    //TCOMIMXWriter       i_xmlwriter;
    //Msxml2_tlb::IXMLDOMDocumentPtr doc;
    if ((IMXWriter *)i_xmlwriter == NULL)
    {
        i_xmlwriter   = CoMXXMLWriter::Create();
        i_xmlwriter->indent = VARIANT_TRUE;
    }
    if ((ISAXXMLReader *)i_xmlreader == NULL)
    {
        i_xmlreader   = CoSAXXMLReader::Create();
        i_xmlreader->putContentHandler((IMXWriter *)i_xmlwriter);
    }
    i_xmlwriter->set_output((IDispatch *)doc);
    i_xmlreader->parse(doc->get_xml());
    //i_xmlreader->parse((IDispatch *)doc);

 

3.  先保存成一个文件,然后利用CFile将文件内容按Tag换行.然后顺序调用msxml的load和save重新打开和保存该文件。这时你再用记事本打开看看! 这种方法也算一种方法,比较笨的方法。
地址:http://www.5iv.net/067/how162267.htm

posted on 2008-02-02 22:27 大龙 阅读(3002) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理