使用 vbscript 检查 XML 中的特定节点是否存在 [英] check particular node is exist or not in XML using vbscript

查看:23
本文介绍了使用 vbscript 检查 XML 中的特定节点是否存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的 XML 文件:

This is my XML file :

<ECSC>
   <ATTRIBUTES>
      <some part of attribute section>
   </ATTRIBUTES>
   <SCRIPT>
      <ETXML_LINE_TABTYPE>
         <some part of script section>                 
      </ETXML_LINE_TABTYPE>
   </SCRIPT>
   <PARAMETERS>
      <ETPAR_GUIX>
         <item>
            <PNAME>I_LANG</PNAME>
            <PTYP>I</PTYP>
            <PINDEX>0003</PINDEX>
            <PDATLEN>0128</PDATLEN>
            <PINTTYP>C</PINTTYP>
            <PINTLEN>000128</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0001</SORT_LNR>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>WE20_100_STEP_1</PNAME>
            <PTYP>X</PTYP>
            <PDESC>WE20 - SAPMSEDIPARTNER - 100</PDESC>
            <PINDEX>0009</PINDEX>
            <PGROUP>SAPGUI</PGROUP>
            <XMLREF_TYP>G</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>SAPGUI</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0001</SORT_LNR>
            <PREF_NAME2>SAPGUI</PREF_NAME2>
            <VALUE>&lt;VALUE&gt;</VALUE>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>V_LANG</PNAME>
            <PTYP>V</PTYP>
            <PINDEX>0007</PINDEX>
            <PGROUP>V.01</PGROUP>
            <PDATLEN>0128</PDATLEN>
            <PINTTYP>C</PINTTYP>
            <PINTLEN>000128</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0002</SORT_LNR>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>WE20_100_STEP_2</PNAME>
            <PTYP>X</PTYP>
            <PDESC>WE20 - SAPMSEDIPARTNER - 100</PDESC>
            <PINDEX>0010</PINDEX>
            <PGROUP>SAPGUI</PGROUP>
            <XMLREF_TYP>G</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>SAPGUI</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0002</SORT_LNR>
            <PREF_NAME2>SAPGUI</PREF_NAME2>
            <VALUE>&lt;VALUE&gt;</VALUE>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>I_AGENT</PNAME>
            <PTYP>I</PTYP>
            <PINDEX>0002</PINDEX>
            <PGROUP>I.03</PGROUP>
            <PDATLEN>0128</PDATLEN>
            <PINTTYP>C</PINTTYP>
            <PINTLEN>000128</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0003</SORT_LNR>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>WE20_100_STEP_3</PNAME>
            <PTYP>X</PTYP>
            <PDESC>WE20 - SAPMSEDIPARTNER - 100</PDESC>
            <PINDEX>0011</PINDEX>
            <PGROUP>GETGUI</PGROUP>
            <XMLREF_TYP>I</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>GETGUI</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0003</SORT_LNR>
            <PREF_NAME2>GETGUI</PREF_NAME2>
            <VALUE>&lt;VALUE&gt;</VALUE>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>I_TYPE</PNAME>
            <PTYP>I</PTYP>
            <PINDEX>0004</PINDEX>
            <PGROUP>V.04</PGROUP>
            <PDATLEN>0128</PDATLEN>
            <PINTTYP>C</PINTTYP>
            <PINTLEN>000128</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0004</SORT_LNR>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>WE20_100_STEP_4</PNAME>
            <PTYP>X</PTYP>
            <PDESC>WE20 - SAPMSEDIPARTNER - 100</PDESC>
            <PINDEX>0012</PINDEX>
            <PGROUP>GETGUI</PGROUP>
            <XMLREF_TYP>I</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>GETGUI</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0004</SORT_LNR>
            <PREF_NAME2>GETGUI</PREF_NAME2>
            <VALUE>&lt;VALUE&gt;</VALUE>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>V_AGENT</PNAME>
            <PTYP>V</PTYP>
            <PINDEX>0006</PINDEX>
            <PGROUP>I.02</PGROUP>
            <PDATLEN>0128</PDATLEN>
            <PINTTYP>C</PINTTYP>
            <PINTLEN>000128</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0005</SORT_LNR>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>WE20_100_STEP_5</PNAME>
            <PTYP>X</PTYP>
            <PDESC>WE20 - SAPMSEDIPARTNER - 100</PDESC>
            <PINDEX>0013</PINDEX>
            <PGROUP>GETGUI</PGROUP>
            <XMLREF_TYP>I</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>GETGUI</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0005</SORT_LNR>
            <PREF_NAME2>GETGUI</PREF_NAME2>
            <VALUE>&lt;VALUE&gt;</VALUE>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>V_TYPE</PNAME>
            <PTYP>V</PTYP>
            <PINDEX>0008</PINDEX>
            <PGROUP>V.03</PGROUP>
            <PDATLEN>0128</PDATLEN>
            <PINTTYP>C</PINTTYP>
            <PINTLEN>000128</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0006</SORT_LNR>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>WE20_100_STEP_6</PNAME>
            <PTYP>X</PTYP>
            <PDESC>WE20 - SAPMSEDIPARTNER - 100</PDESC>
            <PINDEX>0014</PINDEX>
            <PGROUP>SAPGUI</PGROUP>
            <XMLREF_TYP>G</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>SAPGUI</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0006</SORT_LNR>
            <PREF_NAME2>SAPGUI</PREF_NAME2>
            <VALUE>&lt;VALUE&gt;</VALUE>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>MSG_1</PNAME>
            <PTYP>X</PTYP>
            <PDESC>Rules for Message Check eCATT Command MESSAGE</PDESC>
            <PINDEX>0005</PINDEX>
            <PGROUP>MESSAGE</PGROUP>
            <XMLREF_TYP>M</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>ETMSG_DEF_TABTYPE</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0007</SORT_LNR>
            <PREF_NAME2>ETMSG_DEF_TABTYPE</PREF_NAME2>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>E_MSG_1</PNAME>
            <PTYP>X</PTYP>
            <PDESC>Collected Messages Before ENDMESSAGE</PDESC>
            <PINDEX>0001</PINDEX>
            <PGROUP>ENDMESSAGE</PGROUP>
            <XMLREF_TYP>N</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>ETMSG_RES_TABTYPE</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0008</SORT_LNR>
            <PREF_NAME2>ETMSG_RES_TABTYPE</PREF_NAME2>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
         <item>
            <PNAME>ZX_FI_FP_0569_MS07_COAS_FB_1</PNAME>
            <PTYP>X</PTYP>
            <PDESC>TF_FI_FP_FI_0569_MS07_CO_Search_Help_Internal_Orders_vTD0_1_</PDESC>
            <PINDEX>0015</PINDEX>
            <PGROUP>REF</PGROUP>
            <XMLREF_TYP>R</XMLREF_TYP>
            <PSTRUC_TYP>T</PSTRUC_TYP>
            <PREF_NAME>ZX_FI_FP_0569_MS07_COAS_FB01</PREF_NAME>
            <PDATLEN>0000</PDATLEN>
            <PINTLEN>000000</PINTLEN>
            <PDECIMALS>000000</PDECIMALS>
            <SORT_LNR>0009</SORT_LNR>
            <PREF_NAME2>ZX_FI_FP_0569_MS07_COAS_FB01</PREF_NAME2>
            <VAL_TYPE>T</VAL_TYPE>
            <TAB_INDEX>0</TAB_INDEX>
         </item>
      </ETPAR_GUIX>
   </PARAMETERS>
</ECSC>

我想在 标签中检查上述 XML 文件 nodeName 是否存在..?例如在 标签中,I_LANG 项目没有标签或 nodeName 像 所以在这种情况下 VB 脚本应该显示错误.

I want to check in above XML file in <PARAMETER> tag nodeName <PGROUP> is exist or NOT..? For example In <PARAMETER> tag for <PNAME>I_LANG</PNAME> item does not have tag or nodeName like <PGROUP> so in this situation VB script should display error.

对于 <PNAME>WE20_100_STEP_1</PNAME> nodeName 标签存在所以这是正确的这样我想检查哪个 标签不存在.

For <PNAME>WE20_100_STEP_1</PNAME> the nodeName <PGROUP> tag is exist so this is correct In this way I want to check for which <PNAME> the <PGROUP> tag is not exist.

我尝试过以下 vbscript :

I have tried following vbscript :

Dim oFS      : Set oFS      = CreateObject("Scripting.FileSystemObject")
Dim sFSpec   : sFSpec       =        oFS.GetAbsolutePathName("C:\sample.xml")
Dim objMSXML : Set objMSXML = CreateObject("Msxml2.DOMDocument")
objMSXML.setProperty "SelectionLanguage", "XPath"
objMSXML.async = False
objMSXML.load sFSpec
objMSXML.validateOnParse = True  
counter=0
Set  NodeList =      objMSXML.documentElement.selectNodes("/ECSC/PARAMETERS/ETPAR_GUIX/item/PGROUP")
for each item in NodeList
myPNAME = objMSXML.getElementsByTagName("PNAME").item(counter).text
If (Left(myPNAME,1)="I") Then
    If objMSXML.getElementsByTagName("PNAME").item(counter).nodeName = "PGROUP" Then
        msgbox("PGROUP is exist for" &myPNAME)
    Else
        msgbox("PGROUP is NOT exist for" &myPNAME)
    End If
End If
counter=counter+1
  Next

请帮忙.提前致谢.

推荐答案

使用这个 XPath 你会得到所有 没有对应的 :

Using this XPath you'll get all <PNAME> which doesn't have corresponding <PGROUGP> :

/ECSC/PARAMETERS/ETPAR_GUIX/item[not(PGROUP)]/PNAME

这样你就可以确定 NodeList 中的每个 item 必须没有 :

This way you're sure that each item in NodeList must be without <PGROUP> :

Set NodeList = objMSXML.documentElement.selectNodes("/ECSC/PARAMETERS/ETPAR_GUIX/item[not(PGROUP)]/PNAME")

这篇关于使用 vbscript 检查 XML 中的特定节点是否存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆