使用 vbscript 检查 XML 节点是否存在 [英] Check XML node exist or not using vbscript
问题描述
这是我的 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><VALUE></VALUE>
<VAL_TYPE>T</VAL_TYPE>
<TAB_INDEX>0</TAB_INDEX>
</item>
<item>
<PNAME>V_LANG</PNAME>
<PTYP>V</PTYP>
<PINDEX>0007</PINDEX>
<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><VALUE></VALUE>
<VAL_TYPE>T</VAL_TYPE>
<TAB_INDEX>0</TAB_INDEX>
</item>
<item>
<PNAME>I_AGENT</PNAME>
<PTYP>I</PTYP>
<PINDEX>0002</PINDEX>
<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><VALUE></VALUE>
<VAL_TYPE>T</VAL_TYPE>
<TAB_INDEX>0</TAB_INDEX>
</item>
<item>
<PNAME>I_TYPE</PNAME>
<PTYP>I</PTYP>
<PINDEX>0004</PINDEX>
<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><VALUE></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><VALUE></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><VALUE></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>
我想在标签 nodeName 中签入上述 XML 文件是否存在..?例如在
标签中,
项目没有标签或 nodeName 像
所以在这种情况下 VB 脚本应该显示错误.
I want to check in above XML file in tag nodeName 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.
以下 XML
节点没有对应的
1)
2)
3)
4)
对于这些 VB 脚本应该显示错误,但我尝试使用以下 vb 脚本,它只显示 <PNAME>I_LANG</PNAME>
的错误,而不显示其他人的错误.请帮忙
The following XML <PNAME>
node doesn't have corresponding <PGROUP>
1)<PNAME>I_LANG</PNAME>
2)<PNAME>V_LANG</PNAME>
3)<PNAME>I_AGENT</PNAME>
4)<PNAME>I_TYPE</PNAME>
for these VB script should display error but I tried with following vb script it only displaying error for <PNAME>I_LANG</PNAME>
not for others. Please help
我尝试过以下 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[not(PGROUP)]/PNAME")
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
推荐答案
由于 NodeList
已经包含没有对应
的节点,所以不需要做If
在 For Each
循环中再检查:
Since NodeList
already contain nodes without corresponding <PGROUP>
, you don't need to do If
checking anymore inside For Each
loop :
Set NodeList = objMSXML.documentElement.selectNodes("/ECSC/PARAMETERS/ETPAR_GUIX/item[not(PGROUP)]/PNAME")
For Each item in NodeList
myPNAME = item.text
msgbox("PGROUP is NOT exist for" &myPNAME)
Next
这篇关于使用 vbscript 检查 XML 节点是否存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!