将父节点的多个嵌套子节点值解析为单个输出

时间:2017-10-22 04:19:43

标签: xml parsing vbscript

我试图弄清楚如何运行查询以获取下面xml中的每个CCI_REF属性数据,并将每个VULN标记下的多个值(CCI-000193,CCI-000192等)输出到单个窗口中。如您所见,一些VULN标签只有一个CCI_REF,有些可能有多个。我希望输出只显示属于其自己的父VULN标记的CCI_REF值。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CHECKLIST>
 <STIGS>
  <iSTIG>
   <VULN>
    <STIG_DATA>
     <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
     <ATTRIBUTE_DATA>V-1070</ATTRIBUTE_DATA>
    </STIG_DATA>
    <STIG_DATA>
     <VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
     <ATTRIBUTE_DATA>CCI-000192</ATTRIBUTE_DATA>
    </STIG_DATA>
    <STIG_DATA>
     <VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
     <ATTRIBUTE_DATA>CCI-000193</ATTRIBUTE_DATA>
    </STIG_DATA>
    <STIG_DATA>
     <VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
     <ATTRIBUTE_DATA>CCI-000194</ATTRIBUTE_DATA>
    </STIG_DATA>
   </VULN>
   <VULN>
    <STIG_DATA>
     <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
     <ATTRIBUTE_DATA>V-1071</ATTRIBUTE_DATA>
    </STIG_DATA>
    <STIG_DATA>
     <VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
     <ATTRIBUTE_DATA>CCI-000194</ATTRIBUTE_DATA>
    </STIG_DATA>
   </VULN>
  </iSTIG>
 </STIGS>
</CHECKLIST>

以下是我到目前为止提出的示例代码。它将循环并显示CCI-000XXX的每个实例,但是单独而不是仅在每个VULN标记的1个输出窗口中。所以wscript.echo将发送3个弹出窗口而不是单个窗口,列出所有3个值。有谁知道如何更改代码以获得我需要的东西?

Set xmlDoc = _
  CreateObject("Microsoft.XMLDOM")

xmlDoc.setProperty "SelectionLanguage", "XPath"

xmlDoc.Async = "False"

xmlDoc.Load("C:\Test\test.xml")

strQuery = "/CHECKLIST/STIGS/iSTIG/VULN/STIG_DATA [VULN_ATTRIBUTE='CCI_REF'] /ATTRIBUTE_DATA"

Set CCI_Ref=xmlDoc.selectNodes (strQuery)

For Each objNode in CCI_Ref

wscript.echo objNode.text

Next

0 个答案:

没有答案