通过xsl转换大xml文件
这几天在做这个,网上的几个方法我都试过了,汇总如下
方法一:
XPathDocument myXPathDoc = new XPathDocument(tbXMLFile.Text);
XslCompiledTransform myXslTrans = new XslCompiledTransform(); myXslTrans.Load(tbXSLFile.Text);
XmlTextWriter myWriter = new XmlTextWriter("toSolrXML.xml", null); myWriter.Formatting = Formatting.Indented; myXslTrans.Transform(myXPathDoc, null, myWriter);
|
这种方法可以很好的转换xml文件,但是转换大xml文件时就无能为力了,我转55mb的xml时,报内存错误。
方法二:
MSXML2.DOMDocument xmldoc = new DOMDocument(); xmldoc.async = false; xmldoc.preserveWhiteSpace = true; xmldoc.load(tbXMLFile.Text);
MSXML2.DOMDocument xsldoc = new DOMDocument(); xsldoc.async = false; xsldoc.load(tbXSLFile.Text);
MSXML2.DOMDocument result = new DOMDocument(); result.async = false; result.preserveWhiteSpace = true;
xmldoc.transformNodeToObject(xsldoc, result); result.save("toSolrXML.xml"); |
这种方法可以很好的转换大xml文件,但是save方法生成的文件没有换行。可读性很差。
方法三:
XmlTextWriter myWriter = new XmlTextWriter("toSolrXML.xml", null); myWriter.Formatting = Formatting.Indented;
System.Xml.Xsl.XslCompiledTransform t = new System.Xml.Xsl.XslCompiledTransform();
XmlReaderSettings settings = new XmlReaderSettings(); settings.ProhibitDtd = false;
XmlReader xmlReader = XmlReader.Create(tbXMLFile.Text, settings); XmlReader xslReader = XmlReader.Create(tbXSLFile.Text); t.Load(xslReader); t.Transform(xmlReader, null, myWriter); |
这种方式是三种中最好的,速度快,能转换大文件,而且生成的xml文件是有换行的,可读性强