2014-07-04 72 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> 
      <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文件中<PARAMETER>標籤節點名稱<PGROUP>是存在或不..? 例如在<PARAMETER>標記爲<PNAME>I_LANG</PNAME>項目沒有標籤或nodeName像<PGROUP>所以在這種情況下VB腳本應該顯示錯誤。

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

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

請幫助。先謝謝你。

+0

[格式化您的XML正確](http://www.freeformatter.com/html-formatter.html#ad-output)下次! – har07

回答

0

使用這個XPath,你會得到所有<PNAME>不具有相應的<PGROUGP>

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

這樣,你一定在NodeList每個item必須是無<PGROUP>

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

是的這是對的,但它只需要''標籤的前兩項。它無法找到沒有任何對應的''的所有''。請幫幫我。謝謝 – Pravin

+0

這個工作正常,因爲您發佈的問題是XML輸入。沒有人可以進一步提供幫助,除非您可以提供使用此XPath失敗的示例XML(並解釋它在給定此類XML示例時特別失敗) – har07

+0

是的,這僅適用於上述給定的XML文件' I_LANG此節點不有任何相應的''節點但是如果我想查找所有''沒有''的節點,所以我嘗試使用上面的代碼,但它不給出任何答案,除了' I_LANG'請幫助 – Pravin

相關問題