2014-07-07 60 views
-1

這是我的XML文件檢查XML節點存在或不使用VBScript

<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> 

     <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> 

     <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> 

     <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> 

我要檢查上述XML文件中的標籤節點名稱是存在或不..?例如在<PARAMETER>標記爲<PNAME>I_LANG</PNAME>項目沒有標記或nodeName像<PGROUP>所以在這種情況下VB腳本應該顯示錯誤。

對於<PNAME>WE20_100_STEP_1</PNAME>節點名<PGROUP>標籤是存在的,所以這是正確的這樣,我要檢查其<PNAME><PGROUP>標籤是不存在的。

以下XML <PNAME>節點不具有相應<PGROUP> 1)<PNAME>I_LANG</PNAME> 2)<PNAME>V_LANG</PNAME> 3)<PNAME>I_AGENT</PNAME> 4)<PNAME>I_TYPE</PNAME> 這些VB腳本應顯示錯誤,但我試圖與以下VB腳本它只顯示錯誤對於<PNAME>I_LANG</PNAME>不適用於其他人。請幫助

我曾嘗試下面的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 
+0

可能重複[使用vbscript檢查特定節點是否存在XML](http://stackoverflow.com/questions/24576856/check-particular-node-is-exist-or-not-in-xml-using-vbscript) –

回答

0

由於NodeList已經包含節點沒有相應<PGROUP>,你不需要做IfFor Each循環檢查了:

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 
+0

是的,它的工作正確,現在謝謝你這麼多朋友... – user3728765

相關問題