无法在VBScript中读取XML

时间:2014-06-10 17:09:21

标签: xml vbscript

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

我该如何解决这个问题?

1 个答案:

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