Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
查找xml节点和子属性_Xml_Vba - Fatal编程技术网

查找xml节点和子属性

查找xml节点和子属性,xml,vba,Xml,Vba,我需要找到数据集的节点名及其子节点的所有属性。因此,我使用下一个循环来查找FCDA及其属性的值。但这些代码不起作用。你能帮帮我吗,我哪里错了 XML数据 AnalystCave有一个很好的教程: 方法1 从根节点向下钻取到最后一个叶。对于每个循环,每个嵌套的都应该迭代其上方每个循环的子节点 DocumentElement:根节点 XDoc.DocumentElement:根节点ChildNodes:数据集 XDoc.DocumentElement:根节点子节点:数据集子节点:FCDA节点

我需要找到数据集的节点名及其子节点的所有属性。因此,我使用下一个循环来查找FCDA及其属性的值。但这些代码不起作用。你能帮帮我吗,我哪里错了

XML数据
AnalystCave有一个很好的教程:

方法1 从根节点向下钻取到最后一个叶。对于每个循环,每个嵌套的
都应该迭代其上方每个
循环的
子节点

  • DocumentElement:根节点
  • XDoc.DocumentElement:根节点ChildNodes:数据集
  • XDoc.DocumentElement:根节点子节点:数据集子节点:FCDA节点

方法2 迭代
XDoc返回的
FCDA
节点集合。选择节点(“//FCDA”)



我只包含了xml文本的一部分。没有包含所有的xml。在我更正了一个完整的xml文档后,您的代码运行正常。请详细说明您不工作的内容。很抱歉,我只包含了xml的一些部分。我需要遍历一些特定的节点。我是如何经历的。为此,我写了一些代码。它不起作用。很抱歉,我只包含了xml的一些部分。我需要遍历一些特定的节点。我是如何经历的。为此,我写了一些代码。它不起作用。“你能帮忙吗。@帕菲如果我仔细检查过OP的代码,问题是显而易见的。@ThomasInzina,谢谢你的更新.”。。第一个代码对我不起作用。第二个是工作。是否可以将数据集名称与第二个代码一起获取?
<DataSet name="StatUrgA" desc="Primary Switch and General Status">
   <FCDA lnClass="LLN0" prefix="" doName="Loc" ldInst="LD1" fc="ST" />
   <FCDA lnClass="GGIO" prefix="ENMC" doName="Ind2" lnInst="1" ldInst="LD1" fc="ST" />
   <FCDA lnClass="GGIO" prefix="ENMC" doName="Ind3" lnInst="1" ldInst="LD1" fc="ST" />
   <FCDA lnClass="GGIO" prefix="ENMC" doName="Ind1" lnInst="1" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XCBR" prefix="CB" doName="BlkCls" lnInst="10" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XCBR" prefix="CB" doName="BlkOpn" lnInst="10" ldInst="LD1" fc="ST" />
   <FCDA lnClass="CSWI" prefix="CB" doName="Pos" lnInst="10" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XSWI" prefix="DCO" doName="BlkCls" lnInst="15" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XSWI" prefix="DCO" doName="BlkOpn" lnInst="15" ldInst="LD1" fc="ST" />
   <FCDA lnClass="CSWI" prefix="DCO" doName="Pos" lnInst="15" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XSWI" prefix="ESW" doName="BlkCls" lnInst="16" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XSWI" prefix="ESW" doName="BlkOpn" lnInst="16" ldInst="LD1" fc="ST" />
   <FCDA lnClass="CSWI" prefix="ESW" doName="Pos" lnInst="16" ldInst="LD1" fc="ST" />
   <FCDA lnClass="GGIO" prefix="PS" doName="DPCSO" lnInst="2" ldInst="LD0" fc="ST" />
   <FCDA lnClass="GGIO" prefix="PS" doName="DPCSO" lnInst="1" ldInst="LD0" fc="ST" />
   <FCDA lnClass="LPHD" prefix="" doName="InOv" lnInst="1" ldInst="LD1" fc="ST" />
   <FCDA lnClass="LPHD" prefix="" doName="InOv" lnInst="1" ldInst="LD0" fc="ST" />
</DataSet>
<DataSet name="StatIed" desc="Status">
   <FCDA lnClass="LLN0" prefix="" doName="Beh" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XCBR" prefix="CB" doName="Beh" lnInst="10" ldInst="LD1" fc="ST" />
   <FCDA lnClass="CSWI" prefix="CB" doName="Beh" lnInst="10" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XSWI" prefix="DCO" doName="Beh" lnInst="15" ldInst="LD1" fc="ST" />
   <FCDA lnClass="CSWI" prefix="DCO" doName="Beh" lnInst="15" ldInst="LD1" fc="ST" />
   <FCDA lnClass="XSWI" prefix="ESW" doName="Beh" lnInst="16" ldInst="LD1" fc="ST" />
   <FCDA lnClass="CSWI" prefix="ESW" doName="Beh" lnInst="16" ldInst="LD1" fc="ST" />
   <FCDA lnClass="LPHD" prefix="" doName="PhyHealth" lnInst="1" ldInst="LD1" fc="ST" />
</DataSet>
<DataSet name="MeasFlt" desc="Measurands">
   <FCDA lnClass="MMXU" prefix="UI" doName="TotW" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="PhV" lnInst="2" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="A" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="PhV" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="PPV" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="Hz" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="TotPF" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="TotVA" lnInst="1" ldInst="LD1" fc="MX" />
   <FCDA lnClass="MMXU" prefix="UI" doName="TotVAr" lnInst="1" ldInst="LD1" fc="MX" />
</DataSet> 
Dim strXml As String
Dim XDoc As Object, root As Object
Filename = ThisWorkbook.Sheets("CID").Cells(1, 1).Value
Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
strXml = XDoc.Load(Filename)
Set root = XDoc.DocumentElement
For Each datasetnodes In XDoc.ChildNodes
    For Each fcdanodes In XDoc.ChildNodes
        Set List1 = XDoc.SelectNodes("//FCDA")
        ThisWorkbook.Sheets("Datasets").Cells(i + 2, 3).Value = List1(i).getAttribute("ldInst")
        MsgBox List1(i).getAttribute("ldInst")
        i = i + 1
    Next
Next
Set root = XDoc.DocumentElement
For Each datasetnodes In root.ChildNodes
    For Each fcdanodes In datasetnodes.ChildNodes
        ThisWorkbook.Sheets("Datasets").Cells(i + 2, 3).Value = fcdanodes.getAttribute("ldInst")
         i = i + 1
    Next
Next
Set root = XDoc.DocumentElement
For Each fcdanodes In XDoc.SelectNodes("//FCDA")
    ThisWorkbook.Sheets("Datasets").Cells(i + 2, 3).Value = fcdanodes.getAttribute("ldInst")
    i = i + 1
Next