我在VBScript中验证XML时遇到了一些问题: -
这是我的XML数据。它包含多个<item>
个节点。我想检查,当<PNAME>
节点值以&#34; I&#34;开头时,其<PTYP>
节点值应以&#34; I&#34;开头。和<PGROUP>
节点值相同。
如果节点值不以&#34; I&#34;在节点<PTYP>
和<PGROUP>
中,脚本应该通过一些消息。
<item>
<PNAME>I_ORDER_NUMBER_FROM_TABLE</PNAME>
<PTYP>I</PTYP>
<PDESC>Order Number</PDESC>
<PINDEX>0022</PINDEX>
<PGROUP>I.01</PGROUP>
<PREF_TYPE>DTEL</PREF_TYPE>
<PREF_NAME>AUFNR</PREF_NAME>
<PDOM>AUFNR</PDOM>
<PDATTYP>CHAR</PDATTYP>
<PDATLEN>0012</PDATLEN>
<PINTTYP>C</PINTTYP>
<PINTLEN>000024</PINTLEN>
<PDECIMALS>000000</PDECIMALS>
<SORT_LNR>0001</SORT_LNR>
<PREF_NAME2>AUFNR</PREF_NAME2>
<VALUE>000500000020</VALUE>
<TAB_INDEX>0</TAB_INDEX>
</item>
我该如何解决这个问题?
答案 0 :(得分:0)
我在本地xml文件中使用了您的数据,以下内容似乎对我有用。希望这对你也有帮助。我通过添加&#34;项目&#34;稍微修改了XML。项目之前的元素。
<items>
<item>
<PNAME>I_ORDER_NUMBER_FROM_TABLE</PNAME>
<PTYP>I</PTYP>
<PDESC>Order Number</PDESC>
<PINDEX>0022</PINDEX>
<PGROUP>I.01</PGROUP>
<PREF_TYPE>DTEL</PREF_TYPE>
<PREF_NAME>AUFNR</PREF_NAME>
<PDOM>AUFNR</PDOM>
<PDATTYP>CHAR</PDATTYP>
<PDATLEN>0012</PDATLEN>
<PINTTYP>C</PINTTYP>
<PINTLEN>000024</PINTLEN>
<PDECIMALS>000000</PDECIMALS>
<SORT_LNR>0001</SORT_LNR>
<PREF_NAME2>AUFNR</PREF_NAME2>
<VALUE>000500000020</VALUE>
<TAB_INDEX>0</TAB_INDEX>
</item>
<item>
<PNAME>I_ORDER_NUMBER_FROM_TABLE2</PNAME>
<PTYP>B</PTYP>
<PDESC>Order Number</PDESC>
<PINDEX>0022</PINDEX>
<PGROUP>I.01</PGROUP>
<PREF_TYPE>DTEL</PREF_TYPE>
<PREF_NAME>AUFNR</PREF_NAME>
<PDOM>AUFNR</PDOM>
<PDATTYP>CHAR</PDATTYP>
<PDATLEN>0012</PDATLEN>
<PINTTYP>C</PINTTYP>
<PINTLEN>000024</PINTLEN>
<PDECIMALS>000000</PDECIMALS>
<SORT_LNR>0001</SORT_LNR>
<PREF_NAME2>AUFNR</PREF_NAME2>
<VALUE>000500000020</VALUE>
<TAB_INDEX>0</TAB_INDEX>
</item>
<item>
<PNAME>I_ORDER_NUMBER_FROM_TABLE3</PNAME>
<PTYP>I</PTYP>
<PDESC>Order Number</PDESC>
<PINDEX>0022</PINDEX>
<PGROUP>I.01</PGROUP>
<PREF_TYPE>DTEL</PREF_TYPE>
<PREF_NAME>AUFNR</PREF_NAME>
<PDOM>AUFNR</PDOM>
<PDATTYP>CHAR</PDATTYP>
<PDATLEN>0012</PDATLEN>
<PINTTYP>C</PINTTYP>
<PINTLEN>000024</PINTLEN>
<PDECIMALS>000000</PDECIMALS>
<SORT_LNR>0001</SORT_LNR>
<PREF_NAME2>AUFNR</PREF_NAME2>
<VALUE>000500000020</VALUE>
<TAB_INDEX>0</TAB_INDEX>
</item>
<item>
<PNAME>I_ORDER_NUMBER_FROM_TABLE4</PNAME>
<PTYP>I</PTYP>
<PDESC>Order Number</PDESC>
<PINDEX>0022</PINDEX>
<PGROUP>B.01</PGROUP>
<PREF_TYPE>DTEL</PREF_TYPE>
<PREF_NAME>AUFNR</PREF_NAME>
<PDOM>AUFNR</PDOM>
<PDATTYP>CHAR</PDATTYP>
<PDATLEN>0012</PDATLEN>
<PINTTYP>C</PINTTYP>
<PINTLEN>000024</PINTLEN>
<PDECIMALS>000000</PDECIMALS>
<SORT_LNR>0001</SORT_LNR>
<PREF_NAME2>AUFNR</PREF_NAME2>
<VALUE>000500000020</VALUE>
<TAB_INDEX>0</TAB_INDEX>
</item>
</items>
脚本:
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
xmlDoc.Load("items.xml")
Set root = xmlDoc.documentElement
Set items = root.childNodes
for each item in items
myPNAME = item.getElementsByTagName("PNAME").item(0).text
myPTYP = item.getElementsByTagName("PTYP").item(0).text
myPGROUP = item.getElementsByTagName("PGROUP").item(0).text
If Left(myPNAME, 1) = "I" Then
'myPNAME Starts with "I"
IsValid = True
'Innocent until proven guilty
If Left(myPTYP, 1) <> "I" Then
IsValid = False
End If
If Left(myPGROUP, 1) <> "I" Then
IsValid = False
End If
If IsValid = False Then
wscript.echo myPNAME & " is not valid."
End If
IsValid = True
End If
next
输出
I_ORDER_NUMBER_FROM_TABLE2 is invalid
I_ORDER_NUMBER_FROM_TABLE4 is invalid