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重新打开和保存该文件。这时你再用记事本打开看看! 这种方法也算一种方法,比较笨的方法。