Altova Mailing List Archives>Archive Index >microsoft.public.xml Archive Home >Recent entries >Thread Prev - RE: msxml3.dll (0x8007000E) [Thread Next] RE: msxml3.dll (0x8007000E)To: NULL Date: 1/3/2005 10:41:00 AM That's MSXML 2, which dates from 1998. However, if you have MSXML 3, SP1 or
later installed, it is installed by default in "replace" mode, which causes
it to map any calls to "Microsoft.XMLDOM" to "Msxml2.DomDocument", which is
why you're getting the error message from msxml3.dll.
Furthermore, you're creating a string as a result, and that is quite
inefficient (and risky from an encoding point of view). I would re-write it
as:
set source = CreateObject("Msxml2.DomDocument.4.0")
set style = CreateObject("Msxml2.DomDocument.4.0")
Set cmd = Server.CreateObject("ADODB.Command")
Set prm = Server.CreateObject("ADODB.Parameter")
cmd.Properties("Output Stream") = source
' do whatever you need to get the data
' once the XML is loaded, get rid of the ADODB stuff to save memory
styleFile = Server.MapPath("temp.xsl")
style.load styleFile
' The transformNodeToObject approach
' will save you a lot of memory by transforming directly to the response
stream
source.transformNodeToObject style, Response
You can also create a recordset and use the save method to stream it the XML
document. Assume rs contains the records you want:
rs.save source, 1
the 1 is adPersistXML, which save the recordset in XML form, using IStream,
to the XML Document object
Regards,
Mike Sharp
"JZYCN2" wrote:
> We create object using following:
>
> objXMLDom = CreateObject(Microsoft.XMLDOM)
> Set cmd = Server.CreateObject("ADODB.Command")
> Set prm = Server.CreateObject("ADODB.Parameter")
> cmd.Properties("Output Stream") = objXMLDom
> styleFile = temp.xsl
> set source = CreateObject("Microsoft.XMLDOM")
> source.load(objXMLDom)
> set style = CreateObject("Microsoft.XMLDOM")
> style.load(styleFile)
> Response.Write (source.transformNode(style))
>
>
> "rdcpro" wrote:
>
> > You can do that by setting the progID to MSXML 4 in your code. For example:
> >
> > var xmlDoc = new ActiveXObject("Msxml2.DomDocument.4.0");
> > xmlDoc.load("foo.xml")
> >
> > I've used client-side processing to handle some fairly large datasets, but
> > it works best if you can "chunk" the data. It sounds to me like this isn't
> > feasible in your case, but it's worth thinking about.
> >
> > Regards,
> > Mike Sharp
> >
> > "JZYCN2" wrote:
> >
> > > How can you setup msxml4 just to test on IE and try it out? Please let me
> > > know.
> > >
> > > Thanks a lot.
> > >
> > > "rdcpro" wrote:
> > >
> > > > It's incorrect because you don't have a template that matches Billing_date.
> > > > The apply-templates looks like:
> > > >
> > > > <xsl:apply-templates select="Billing_date" />
> > > >
> > > > But the template you have looks like:
> > > >
> > > > <xsl:template match="Billing_end_date">
> > > > <td class="standardText">
> > > > <xsl:value-of select="myprefix:formatDate(string(.))" />
> > > > </td>
> > > > </xsl:template>
> > > >
> > > > It's hard to tell what your XML looks like, but I would think there's a more
> > > > efficient method of processing in the XSLT. If MSXML can parse the XML, and
> > > > the out of memory error is occurring during the transformation, you might
> > > > pick up a bit here.
> > > >
> > > > But unless your IE client machines are pretty robust, I suspect you're not
> > > > going to be able to do this client-side. I believe your XML document is way
> > > > too big. My main dev machine could probably handle an XML document that big,
> > > > but it has 2 GB of memory, but most clients aren't going to have anywhere
> > > > near that much RAM. Even if it did handle a document that size in DOM, it's
> > > > going to take a long time to process.
> > > >
> > > > I would seriously consider a solution that involves paging of the data from
> > > > the query, if it can meet your requirements for the data.
> > > >
> > > > If that won't work, you'll have to use the SAX API of MSXML 3, and do the
> > > > processing that way.
> > > >
> > > > http://msdn.microsoft.com/msdnmag/issues/1100/xml/
> > > >
> > > > I've never tried this on the client, though. You may still run into
> > > > troubles with extremely large documents.
> > > >
> > > > Regards,
> > > > Mike Sharp
> > > >
> > > > "JZYCN2" wrote:
> > > >
> > > > > Why do you think the following is incorrect?
> > > > >
> > > > > <xsl:when test="node()='Billing_end_date'">
> > > > > <xsl:apply-templates select="Billing_date"/>
> > > > > </xsl:when>
> > > > >
> > > > > Because whenever it hits the billing_end_date node, then it should apply the
> > > > > biling_date template. Then please advise the right way of doing this. The
> > > > > XML is created from database through query and I don't know how big it is and
> > > > > also it is at the client side IE. If anyone can help can be greatly
> > > > > appreciated. Thanks in advance.
> > > > >
> > > > > "rdcpro" wrote:
> > > > >
> > > > > > Well, I don't seen anything too weird in the XSLT, though I don't really see
> > > > > > the reason for that large xsl:choose structure, and there's probably a much
> > > > > > more efficient way of doing it. Also, this appears to be incorrect:
> > > > > >
> > > > > > <xsl:when test="node()='Billing_end_date'">
> > > > > > <xsl:apply-templates select="Billing_date"/>
> > > > > > </xsl:when>
> > > > > >
> > > > > >
> > > > > > How big, in megabytes, is that XML? It's entirely possible that MSXML 4
> > > > > > will handle this better. If it doesn't, you'll probably have to use the SAX
> > > > > > API to process this, or else you'll have to break up the XML into chunks that
> > > > > > are easier to manage.
> > > > > >
> > > > > > Are you by any chance doing this client-side in IE? If so, then your memory
> > > > > > constrains are probably even tighter, because IE has to render that huge
> > > > > > thing as well. Sounds like a job for a paging interface.
> > > > > >
> > > > > > I think, but can't really say for sure, that you can handle much larger XML
> > > > > > documents in .NET than you can with MSXML, because you can use a stream based
> > > > > > parser to read the XML. It still generates an in-memory representation of
> > > > > > the data, but I believe the memory footprint is lower. Anyone else out there
> > > > > > know for sure?
> > > > > >
> > > > > >
> > > > > > Regards,
> > > > > > Mike Sharp
> > > > > >
> > > > > > "JZYCN2" wrote:
> > > > > >
> > > > > > > My xslt file is not big and I can attach that. However, XML file might be
> > > > > > > extremely big 86k rows of data has lots of fields. So by using different
> > > > > > > version of msxml may help to resolve this problem?
> > > > > > >
> > > > > > > My xslt file:
> > > > > > >
> > > > > > > - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > > > > > > xmlns:msxsl="urn:schemas-microsoft-com:xslt"
> > > > > > > xmlns:myprefix="http://www.captionkit.com/namespaces" version="1.0">
> > > > > > > <xsl:output method="html" />
> > > > > > > - <xsl:template match="/">
> > > > > > > - <xsl:if test="count(root/gmol) > 65530">
> > > > > > > <H5>Warning: First 65,530 records were imported into Excel.</H5>
> > > > > > > </xsl:if>
> > > > > > > - <table border="1" width="100%">
> > > > > > > - <xsl:for-each select="/root/gmol">
> > > > > > > - <tr>
> > > > > > > - <xsl:choose>
> > > > > > > - <xsl:when test="node()='Billing_end_date'">
> > > > > > > <xsl:apply-templates select="Billing_date" />
> > > > > > > </xsl:when>
> > > > > > > - <xsl:when test="node()='Notification_Date'">
> > > > > > > <xsl:apply-templates select="Notification_Date" />
> > > > > > > </xsl:when>
> > > > > > > - <xsl:when test="node()='Comment_Date'">
> > > > > > > <xsl:apply-templates select="Comment_Date" />
> > > > > > > </xsl:when>
> > > > > > > - <xsl:when test="node()='GRS_Date'">
> > > > > > > <xsl:apply-templates select="GRS_Date" />
> > > > > > > </xsl:when>
> > > > > > > - <xsl:when test="node()='last_scan_date'">
> > > > > > > <xsl:apply-templates select="last_scan_date" />
> > > > > > > </xsl:when>
> > > > > > > - <xsl:otherwise>
> > > > > > > <xsl:apply-templates select="*" />
> > > > > > > </xsl:otherwise>
> > > > > > > </xsl:choose>
> > > > > > > </tr>
> > > > > > > </xsl:for-each>
> > > > > > > </table>
> > > > > > > </xsl:template>
> > > > > > > - <xsl:template match="*">
> > > > > > > - <td class="standardText">
> > > > > > > - <xsl:choose>
> > > > > > > <xsl:when test=". = ' ' or . = ''"> </xsl:when>
> > > > > > > - <xsl:otherwise>
> > > > > > > <xsl:value-of select="." />
> > > > > > > </xsl:otherwise>
> > > > > > > </xsl:choose>
> > > > > > > </td>
> > > > > > > </xsl:template>
> > > > > > > - <xsl:template match="Billing_end_date">
> > > > > > > - <td class="standardText">
> > > > > > > <xsl:value-of select="myprefix:formatDate(string(.))" />
> > > > > > > </td>
> > > > > > > </xsl:template>
> > > > > > > - <xsl:template match="Notification_Date">
> > > > > > > - <td class="standardText">
> > > > > > > <xsl:value-of select="myprefix:formatDate(string(.))" />
> > > > > > > </td>
> > > > > > > </xsl:template>
> > > > > > > - <xsl:template match="Comment_Date">
> > > > > > > - <td class="standardText">
> > > > > > > <xsl:value-of select="myprefix:formatDate(string(.))" />
> > > > > > > </td>
> > > > > > > </xsl:template>
> > > > > > > - <xsl:template match="GRS_Date">
> > > > > > > - <td class="standardText">
> > > > > > > <xsl:value-of select="myprefix:formatDate(string(.))" />
> > > > > > > </td>
> > > > > > > </xsl:template>
> > > > > > > - <xsl:template match="last_scan_date">
> > > > > > > - <td class="standardText">
> > > > > > > <xsl:value-of select="myprefix:formatDate(string(.))" />
> > > > > > > </td>
> > > > > > > </xsl:template>
> > > > > > > - <msxsl:script language="javascript" implements-prefix="myprefix">
> > > > > > > - <![CDATA[
> > > > > > > function formatDate(myDate)
> > > > > > > {
> > > > > > > var finalDate= "";
> > > > > > > var dateStr = new Date(myDate); //.item(0).text;
> > > > > > >
> > > > > > > if(isNaN(myDate))
> > > > > > > {
> > > > > > >
> > > > > > > finalDate = ((dateStr.getMonth()+1) + "/" + dateStr.getDate() + "/" +
> > > > > > > dateStr.getFullYear())
> > > > > > > return (finalDate)
> > > > > > > }
> > > > > > > else
> > > > > > > {
> > > > > > > return (" ")
> > > > > > > }
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > > ]]>
> > > > > > > </msxsl:script>
> > > > > > > </xsl:stylesheet>
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > "rdcpro" wrote:
> > > > > > >
> > > > > > > > How big is the XML in KB? What's the biggest it could reasonably be? 86k
> > > > > > > > rows means this is probably a pretty big file, and it's possible you're
> > > > > > > > simply out of memory. If the XML isn't simply too big, there are a number of
> > > > > > > > techniques you can use in the XSLT to reduce the working set. You may have
> > > > > > > > to post some or all of your XSLT.
> > > > > > > >
> > > > > > > > Regards,
> > > > > > > > Mike Sharp
> > > > > > > >
> > > > > > > > "JZYCN2" wrote:
> > > > > > > >
> > > > > > > > > We have the following probblem:
> > > > > > > > > When we return about 86K rows of data using xml and xslt, it gives us the
> > > > > > > > > following message:
> > > > > > > > > Error Type:
> > > > > > > > > msxml3.dll (0x8007000E)
> > > > > > > > > Not enough storage is available to complete this operation.
> > > > > > > > >
> > > > > > > > > Can any one help? Thanks a milllion in advance.
| ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
