Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;对象变量未设置";关于MsXml DOMDocument过程的IXMLDOMNode_Xml_Ms Access_Xpath_Vba - Fatal编程技术网

&引用;对象变量未设置";关于MsXml DOMDocument过程的IXMLDOMNode

&引用;对象变量未设置";关于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

所以我有一个相当大的XML文件(40MB),我必须反复搜索。我已经学习了使用XPath使用DOMDocument的好处,我认为我做得对,但我得到的Obj Var不是一派胡言

这里是初始加载…我认为它的加载是因为它为40mb文件延迟了适当的时间长度&没有返回错误

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
我想你想要的是:
“/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
我想你想要的是:
“/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