如何使用vbscript验证XML节点文本

时间:2014-06-27 08:28:20

标签: xml vbscript xml-parsing

这是我的XML文件。

<PARAMETER>
 <ETPAR_GUIX>
    <item>
       <PNAME>COAS_1</PNAME>
       <PTYP>X</PTYP>
       <PDESC>Generated Table for View</PDESC>
       <PINDEX>0001</PINDEX>
       <PGROUP>GETTAB</PGROUP>
       <XMLREF_TYP>T</XMLREF_TYP>
       <PSTRUC_TYP>T</PSTRUC_TYP>
       <PREF_TYPE>VIEW</PREF_TYPE>
       <PREF_NAME>COAS</PREF_NAME>
       <PDATLEN>0000</PDATLEN>
       <PINTLEN>000000</PINTLEN>
       <PDECIMALS>000000</PDECIMALS>
       <SORT_LNR>0001</SORT_LNR>
       <PREF_NAME2>COAS</PREF_NAME2>
       <VAL_TYPE>T</VAL_TYPE>
       <TAB_INDEX>0</TAB_INDEX>
    </item>
    <item>
       <PNAME>I_ORDER_NUMBER_FROM_TABLE</PNAME>
       <PTYP>I</PTYP>
       <PDESC>Generated Table for View</PDESC>
       <PINDEX>0001</PINDEX>
       <PGROUP>I.01</PGROUP>
       <XMLREF_TYP>T</XMLREF_TYP>
       <PSTRUC_TYP>T</PSTRUC_TYP>
       <PREF_TYPE>VIEW</PREF_TYPE>
       <PREF_NAME>COAS</PREF_NAME>
       <PDATLEN>0000</PDATLEN>
       <PINTLEN>000000</PINTLEN>
       <PDECIMALS>000000</PDECIMALS>
       <SORT_LNR>0001</SORT_LNR>
       <PREF_NAME2>COAS</PREF_NAME2>
       <VAL_TYPE>T</VAL_TYPE>
       <TAB_INDEX>0</TAB_INDEX>
    </item>
  </ETPAR_GUIX>
</PARAMETER>

我想检查XML节点<PNAME>是否以字母“I”开头。如果所有XML节点<PNAME>都没有以字母“I”开头,则VB脚本应显示错误。这是我尝试过的vb脚本:

Const XMLDataFile = "D:\Automation\imp\p.xml"

Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = False
xmlDoc.Load(XMLDataFile)

xmlDoc.validateOnParse = True

If xmlDoc.Load(XMLDataFile) Then
  msgbox "SUCCESS loading XML File"
Else  
  msgbox "ERROR loading XML File"
End If

counter=0
Set root = xmlDoc.documentElement
Set items = root.childNodes

for each item in items
  myPNAME = xmlDoc.getElementsByTagName("PNAME").item(counter).text

  If (Left(myPNAME, 1) = "I") Then
    IsValid = True
  else
    IsValid=false
  End If
next

以上VB脚本代码检查以“I”开头的每个<PNAME>字母si。但是如果XML节点<PNAME>字母都没有以字母“I”开头,那么VB脚本应该显示错误。 请帮我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在循环外预设IsValidFalse,如果找到第一个匹配项,请将值更改为True。改变这个:

for each item in items
  myPNAME = xmlDoc.getElementsByTagName("PNAME").item(counter).text

  If (Left(myPNAME, 1) = "I") Then
    IsValid = True
  else
    IsValid=false
  End If
next

进入这个:

IsValid = False
For Each item In items
  myPNAME = xmlDoc.getElementsByTagName("PNAME").item(counter).text

  If Left(myPNAME, 1) <> "I" Then
    IsValid = True
    Exit For
  End If
Next

'At this point the value of IsValid is True if at least one node text started
'with a capital I. Otherwise its value is False.