&引用;对象变量未设置";关于MsXml DOMDocument过程的IXMLDOMNode
所以我有一个相当大的XML文件(40MB),我必须反复搜索。我已经学习了使用XPath使用DOMDocument的好处,我认为我做得对,但我得到的Obj Var不是一派胡言 这里是初始加载…我认为它的加载是因为它为40mb文件延迟了适当的时间长度&没有返回错误&引用;对象变量未设置";关于MsXml DOMDocument过程的IXMLDOMNode,xml,ms-access,xpath,vba,Xml,Ms Access,Xpath,Vba,所以我有一个相当大的XML文件(40MB),我必须反复搜索。我已经学习了使用XPath使用DOMDocument的好处,我认为我做得对,但我得到的Obj Var不是一派胡言 这里是初始加载…我认为它的加载是因为它为40mb文件延迟了适当的时间长度&没有返回错误 Dim someElement As IXMLDOMNode Dim xmlDoc As Object Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") '<-thats a
Dim someElement As IXMLDOMNode
Dim xmlDoc As Object
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
'<-thats a valid file name lookup
xmlDoc.Load DLookup("gsgtver", "Eramdat", "EramID = 1")
顺便说一句,我真的很想做一个“FixID='mystring'”之类的事情,但我做元素1只是为了让它工作。
下面是xml文件的顶部:
<Fix_Records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Fix.xsd">
<!-- ******************************************************** -->
<!-- Local SITE ID : ZAB -->
<!-- Local Release Version: a082a210 -->
<!-- NASD/NADR Version : z084b210 -->
<!-- Date : 02-03-2011 19:02:56 -->
<!-- ******************************************************** -->
<FixRecord>
<FixId>00BTR</FixId>
<IcaoCode>K7</IcaoCode>
<FixType>WAYPOINT</FixType>
<FixName>BTR055100</FixName>
<FixinUs>true</FixinUs>
<IsNational>true</IsNational>
<HighPowerVor>false</HighPowerVor>
<DPositionMapData>false</DPositionMapData>
<Latitude>31170205N</Latitude>
<Longitude>089353453W</Longitude>
<AngularCorr>-0.010472</AngularCorr>
<XSpherical>0.006082693951808</XSpherical>
<YSpherical>-0.85612436871425</YSpherical>
<ZSpherical>0.516734038096893</ZSpherical>
</FixRecord>
<FixRecord>
<FixId>00N10</FixId>
<IcaoCode>MM</IcaoCode>
00BTR
K7
航路点
BTR055100
真的
真的
假的
假的
31170205N
089353453W
-0.010472
0.006082693951808
-0.85612436871425
0.516734038096893
00N10
嗯
谢谢……你们这些聪明人太棒了。你们有一个区分大小写的问题——你们在寻找FixID,实际上你们已经有了FixID。 当您尝试访问它的文本时,会抛出一个异常,因为您没有实际的对象 编辑:正如Jean-François Corbett所指出的,您的XPath也是错误的。以下是解决这两个问题的更新Xpath:
"/Fix_Records/FixRecord[FixId='Id you want']/Latitude"
您可能还想测试是否有要访问的节点,请参阅下面的答案以获取一些提示。您遇到了区分大小写的问题-您正在寻找FixID,实际上您已经有了FixID。 当您尝试访问它的文本时,会抛出一个异常,因为您没有实际的对象 编辑:正如Jean-François Corbett所指出的,您的XPath也是错误的。以下是解决这两个问题的更新Xpath:
"/Fix_Records/FixRecord[FixId='Id you want']/Latitude"
您可能还想测试是否有要访问的节点,请参阅下面的答案以获取一些提示。加载XML后,仍有可能出现解析错误。此代码可以帮助您找到问题所在。根据您的环境进行相应的更改 错误号(6666)显然是个笑话,您必须为您的应用程序提供正确的错误号 编辑:此外,请尝试在XML验证程序中解析XML(或至少部分XML),如
加载XML后,仍有可能出现解析错误。此代码可以帮助您找到问题所在。根据您的环境进行相应的更改 错误号(6666)显然是个笑话,您必须为您的应用程序提供正确的错误号 编辑:此外,请尝试在XML验证程序中解析XML(或至少部分XML),如
您的XPath是错误的
“/Fix\u Records/FixRecord/FixID[1]/Latitude”
表示您正在查找FixRecord
元素的第一个FixID
子元素的Latitude
子元素
但是:
- 有许多
元素FixRecord
- 对于任何给定的
,只有一个FixRecord
子元素(无需指定FixId
),并且[1]
- 最重要的是,
没有FixId
子元素!所以你在寻找一些不存在的东西,这就是导致错误的原因。Latitude
- 正如@James Walford所指出的,还要注意区分大小写<代码>固定ID非
固定ID
- 正如@James Walford所指出的,还要注意区分大小写<代码>固定ID非
“/Fix\u Records/FixRecord[1]/Latitude”
当您准备好进入下一个级别时,请尝试以下操作:
“/Fix\u Records/FixRecord[FixId='mystring']/Latitude”
如果这不起作用,可能会有一些名称空间的奇怪。。。尝试在Xpath中的每个节点规范之前添加xsi:
:
"/xsi:Fix_Records/xsi:FixRecord[1]/xsi:Latitude"
"/xsi:Fix_Records/xsi:FixRecord[xsi:FixId='mystring']/xsi:Latitude"
保持精神,你最终会到达那里的 您的XPath错误
“/Fix\u Records/FixRecord/FixID[1]/Latitude”
表示您正在查找FixRecord
元素的第一个FixID
子元素的Latitude
子元素
但是:
- 有许多
元素FixRecord
- 对于任何给定的
,只有一个FixRecord
子元素(无需指定FixId
),并且[1]
- 最重要的是,
没有FixId
子元素!所以你在寻找一些不存在的东西,这就是导致错误的原因。Latitude
- 正如@James Walford所指出的,还要注意区分大小写<代码>固定ID非
固定ID
- 正如@James Walford所指出的,还要注意区分大小写<代码>固定ID非
“/Fix\u Records/FixRecord[1]/Latitude”
当您准备好进入下一个级别时,请尝试以下操作:
“/Fix\u Records/FixRecord[FixId='mystring']/Latitude”
如果这不起作用,可能会有一些名称空间的奇怪。。。尝试在Xpath中的每个节点规范之前添加xsi:
:
"/xsi:Fix_Records/xsi:FixRecord[1]/xsi:Latitude"
"/xsi:Fix_Records/xsi:FixRecord[xsi:FixId='mystring']/xsi:Latitude"
保持精神,你最终会到达那里的 谢谢大家…我将不得不考虑一下这些东西…直到星期一。谢谢测试代码…我将在不可避免的“下一次”时把它放在手边。谢谢大家…我将不得不考虑一下这些东西…直到星期一。谢谢测试代码…我将在不可避免的“下一次”时把它放在手边我做不到。JFC,你是我的英雄。我不需要xsi部件…在你尝试的第一次“粘贴”中得到了er。JFC,你是我的英雄。我不需要xsi部分…在你尝试的第一次“粘贴”中得到了er。嗯…我想你实际上是第一个获胜者。我以为我贴了你的台词&它不起作用,但它实际上和JFC的一样……现在我已经阅读了所有的评论。谢谢你,你得到答案了。我希望我做的这件事是正确的。有两个答案解决了一半的问题,每一个都更新以解决其余的问题,这取决于你选择你喜欢的答案,尽管它们几乎相同。我本着分享的精神投票支持JFC的答案:-)哦,然后看了看te