对于XML输入,节点值返回null

对于XML输入,节点值返回null,xml,vba,excel,nodevalue,Xml,Vba,Excel,Nodevalue,获取以下宏脚本的错误。需要在单个表中提取日期、名称和地址。由于date只有一个值,因此第二个值返回null 但是,我需要在提取日期的所有记录中显示相同的值 Set ApplicationsNode = oXMLFile.SelectNodes("/Extract/Applications/Application") Set extractnodes = oXMLFile.SelectNodes("/Extract/ExtractDate") Set NameNode = oXMLFile.Sel

获取以下宏脚本的错误。需要在单个表中提取日期、名称和地址。由于date只有一个值,因此第二个值返回null

但是,我需要在提取日期的所有记录中显示相同的值

Set ApplicationsNode = oXMLFile.SelectNodes("/Extract/Applications/Application")
Set extractnodes = oXMLFile.SelectNodes("/Extract/ExtractDate")
Set NameNode = oXMLFile.SelectNodes("/Extract/Applications/Application/Name/text()")
Set AddrNode = oXMLFile.SelectNodes("/Extract/Applications/Application/Addr/text()")

For i = 0 To (ApplicationsNode.Length - 1)

    Extract = extractnodes(i).NodeValue
    Name = NameNode(i).NodeValue
    Addr = AddrNode(i).NodeValue

    mainWorkBook.Sheets("Sheet1").Range("A" & i + 2).Value = Extract
    mainWorkBook.Sheets("Sheet1").Range("C" & i + 2).Value = Name
    mainWorkBook.Sheets("Sheet1").Range("D" & i + 2).Value = Addr

Next
输入XML:

 <Extract>
     <ExtractDate>2018-02-21 10:01:01</ExtractDate>
       <Applications>
          <Application>         
             <Name>1234</Name>
             <Addr>700ST</Addr>
          </Application>    
       <Application>            
            <Name>123466</Name>
            <Addr>277AVD</Addr>
       </Application>
       <Applications>
      </Extract>

2018-02-21 10:01:01
1234
700街
123466
277AVD

尝试在桌面的
content.xml
文件中使用以下部分的元素,并运行以下代码

content.xml
文件中:

<Extract>
    <ExtractDate>2018-02-21 10:01:01</ExtractDate>
    <Applications>
        <Application>         
            <Name>1234</Name>
            <Addr>700ST</Addr>
        </Application>    
        <Application>            
            <Name>123466</Name>
            <Addr>277AVD</Addr>
        </Application>
    </Applications>
</Extract>
填充结果:

2/21/2018 10:01 1234    700ST
2/21/2018 10:01 123466  277AVD

更好的答案已经给出,但这里有一个变化:

Option Explicit
Public Sub DemoXML()
    Dim post As Object, R As Long, C As Long, dateString As String
    With CreateObject("MSXML2.DOMDocument")
         .async = False: .validateOnParse = False
        .Load "C:\Users\User\Desktop\random.xml"
        dateString = .SelectSingleNode("//ExtractDate").Text

        For Each post In .SelectNodes("//Application")
            R = R + 1: Cells(R, 1) = dateString
            Cells(R, 2) = post.FirstChild.Text
            Cells(R, 3) = post.LastChild.Text
        Next post
    End With
End Sub

什么错误?在哪里?而且,XML格式不正确。最后一行应该是
运行时错误-91:Object变量或with block variable not set错误发生在Extract=extractnodes(i).NodeValue;由于节点值从哪一行的输入XMLerror返回空?@Raja,请修复ashleedawg已经指出的格式错误的xml片段。我相信,你来这里是为了寻求一个解决方案,不要把你上面粘贴的部分元素与其他元素混淆。太好了!附带问题:在
r=r+1
之后,冒号的含义是什么?使用冒号可以在一行中容纳多行。这是没有必要使用的。不过,我这样做是为了节省空间。谢谢你的回复。您能告诉我.SelectNodes(“//Extract//Application”)***中每个帖子的语句含义吗?“/”是什么意思?***如果我使用FIlename.SelectNode而不是.SelectNode,会发生什么
Option Explicit
Public Sub DemoXML()
    Dim post As Object, R As Long, C As Long, dateString As String
    With CreateObject("MSXML2.DOMDocument")
         .async = False: .validateOnParse = False
        .Load "C:\Users\User\Desktop\random.xml"
        dateString = .SelectSingleNode("//ExtractDate").Text

        For Each post In .SelectNodes("//Application")
            R = R + 1: Cells(R, 1) = dateString
            Cells(R, 2) = post.FirstChild.Text
            Cells(R, 3) = post.LastChild.Text
        Next post
    End With
End Sub