【发布时间】:2021-02-01 21:16:54
【问题描述】:
我需要在 Microsoft Visual FoxPro 9 SP2 桌面应用程序中读取大 xml 文件。 创建的游标结果包含所需的列和 convert.xsl 文件以将 xml 转换为 xmltocursor 可读的格式。
试过
source = CreateObject('MSXML.Domdocument')
stylesheet = CreateObject('MSXML.Domdocument')
resultDoc = CreateObject('MSXML.Domdocument')
resultDoc.validateOnParse = .t.
stylesheet.load('convert.xsl')
source.load( 'bigxml.xml' )
source.transformNodeToObject(stylesheet, @resultDoc)
* Exception code=E06D7363
IF XMLToCursor(resultDoc.xml, 'result', 8192 )=0
得到了
Fatal exception
Exception code=E06D7363
一行
IF XMLToCursor(resultDoc.xml, 'result', 8192 )=0
应用程序终止。
如何将大xml文件转换为光标?
XSL 是:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="yes"/>
<!-- this replaces root tag with VFPData which is required from CursorToXML to work properly -->
<xsl:template match="/">
<xsl:element name="VFPData">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!-- this will denormalize XML data -->
<xsl:template match="/ettevotjad/ettevotja">
<xsl:element name="Document-Ariregister">
<xsl:element name="nimi">
<xsl:value-of select="nimi"/>
</xsl:element>
<xsl:element name="ariregistr">
<xsl:value-of select="ariregistri_kood"/>
</xsl:element>
<xsl:element name="kmkr_nr">
<xsl:value-of select="kmkr_nr"/>
</xsl:element>
<xsl:element name="ettevotja_">
<xsl:value-of select="ettevotja_staatus"/>
</xsl:element>
<xsl:element name="asukoht_et">
<xsl:value-of select="ettevotja_aadress/asukoht_ettevotja_aadressis"/>
</xsl:element>
<xsl:element name="asukoha_e2">
<xsl:value-of select="ettevotja_aadress/asukoha_ehak_tekstina"/>
</xsl:element>
<xsl:element name="indeks_ett">
<xsl:value-of select="ettevotja_aadress/indeks_ettevotja_aadressis"/>
</xsl:element>
</xsl:element>
</xsl:template>
<!-- to ommit nodes data -->
<xsl:template match="text()">
</xsl:template>
<!-- to work over every node -->
<xsl:template match="*">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
XML 的内容是什么样的?还有xsl?为什么要先进行转换(这可能是您稍后可能进行的过滤转换)。如果直接在 bigxml.xml 上尝试 XMLToCursor() 会出错吗?大有多大?您是否还尝试将转换设置为同步而不是异步(可能是错误的原因)?
-
我可以稍后测试下载 zip。同时:source.async = .F.
-
Andrus,我快速检查了你的拉链。 XSL 有故障。我明白你为什么使用 XSL 但你可以使用 XMLAdapter。
-
@CetinBasoz。我在
source.load( cfn )之前添加了source.async = .F.,但仍然出现同样的异常 -
我也尝试过使用 XMLCursor 和 XMLAdapter。 XMLAdapter 可以处理少量数据,但一旦您拥有一些大数据,它们就毫无用处。我会使用下面提供的 C# 例程。
标签: xml-parsing visual-foxpro foxpro