如何使用vbscript从XML中获取子节点
我有以下类型的XML文件:如何使用vbscript从XML中获取子节点,xml,vbscript,xml-parsing,Xml,Vbscript,Xml Parsing,我有以下类型的XML文件: <ECSC> <ATTRIBUTES> < all child nodes of attribute tag > </ATTRIBUTES> <SCRIPT> <ETXML_LINE_TABTYPE> <item>MESSAGE ( MSG_1 ).</item> <item>* To g
<ECSC>
<ATTRIBUTES>
< all child nodes of attribute tag >
</ATTRIBUTES>
<SCRIPT>
<ETXML_LINE_TABTYPE>
<item>MESSAGE ( MSG_1 ).</item>
<item>* To get the name of the Title Screen.</item>
<item> GETGUI ( FB01_100_STEP_1 ).</item>
<item> SAPGUI ( FB01_100_STEP_2 ).</item>
<item>* Enter Amount and Tax Code.</item>
<item>* and, Press F4 help in the Order Field.</item>
<item> SAPGUI ( FB01_300_STEP_1 ).</item>
<item>* In F4 screen, enter the 'External Order Number'</item>
<item>* pop-up screen is displayed with entries like Order, Description and External Order Number and select 1st order row, press Enter.</item>
<item> SAPGUI ( FB01_200_STEP_1 ).</item>
<item>* To get the values for the field 'Order, Description and External Order No' from F4 help.</item>
<item> GETGUI ( FB01_120_STEP_1 ).</item>
<item>* Press 'Enter' button.</item>
<item> SAPGUI ( FB01_120_STEP_3 ).</item>
<item>* To get the value for the field 'Order' from Main screen.</item>
<item> GETGUI ( FB01_300_STEP_2 ).</item>
<item>* click on 'F3' back button.</item>
<item> SAPGUI ( FB01_300_STEP_3 ).</item>
<item>* click on 'F3' back button.</item>
<item> SAPGUI ( FB01_700_STEP_1 ).</item>
<item>* click 'Yes' button.</item>
<item> SAPGUI ( FB01_200_STEP_2 ).</item>
<item>* click on 'F3' back button.</item>
<item> SAPGUI ( FB01_100_STEP_3 ).</item>
<item>ENDMESSAGE ( E_MSG_1 ).</item>
<item/>
<item>* To display the Title Screen.</item>
<item> LOG ( V_TITLE_SCREEN ).</item>
<item>* To display the 'Order' Number from F4 help.</item>
<item> LOG ( V_ORDER_NO_FROM_F4 ).</item>
<item>* To display the 'Description' from F4 help.</item>
<item> LOG ( V_DESCRIPTION_FROM_F4).</item>
<item>* To display the 'External Order no' value from F4 help.</item>
<item> LOG ( V_EXTERNAL_ORDER_NO_FROM_F4 ).</item>
<item>* To display the 'Order' Number from main screen.</item>
<item> LOG ( V_ORDER_NO_FRM_MAIN_SCREEN ).</item>
<item>*********************************************************************.</item>
<item>* End Execution.</item>
<item>*********************************************************************.</item>
<item/>
<item>*******************************************************************.</item>
<item>* Check.</item>
<item>********************************************************************.</item>
<item>* To check name of Title screen for transaction FB01.</item>
<item> CHEVAR ( V_TITLE_SCREEN = I_TITLE_SCREEN ).</item>
<item>* To check the value for the field 'External Order No' from F4 help, which should be equal to 'External Order No' from table.</item>
<item> CHEVAR ( V_EXTERNAL_ORDER_NO_FRM_TABL = V_EXTERNAL_ORDER_NO_FROM_F4 ).</item>
<item>* To check the values for the field 'Order' number from Table, which should be equal to 'Order' no from F4 screen and Main screen.</item>
<item> CHEVAR ( ( I_ORDER_NUMBER_FROM_TABLE = V_ORDER_NO_FROM_F4 ) AND ( I_ORDER_NUMBER_FROM_TABLE = V_ORDER_NO_FRM_MAIN_SCREEN )).</item>
<item>*******************************************************************.</item>
<item>* End Check.</item>
<item>********************************************************************.</item>
</ETXML_LINE_TABTYPE>
</SCRIPT>
<PARAMETERS>
<all childnodes of parameter of parameters tag >
</PARAMETERS>
</ECSC>
请帮帮我。提前感谢您。像“选择前面没有特定类型元素的每个
”这样的问题是XPath的最佳选择
//脚本//项[
字符串长度(规范化空格()>0
和子字符串(规范化空间(.),1,1)!='*'
和子字符串(规范化空间(前面的同级::项[1]),1,1)!='*'
]
i、 e
- 在
下面的任何 - 不是空的
- 谁的第一个非空白字符不是星星
- 其前一个
也没有星星
Option Explicit
Dim XmlDoc
Dim DefectiveLines, Line, LineNum
Set XmlDoc = CreateObject("MSXML2.DOMDocument")
XmlDoc.setProperty "SelectionLanguage", "XPath"
XmlDoc.async = False
XmlDoc.load "D:\new Automation\backup\script.xml"
If XmlDoc.parseError = 0 Then
Set DefectiveLines = XmlDoc.SelectNodes( _
"//SCRIPT//item[" & _
"string-length(normalize-space(.)) > 0" & _
"and substring(normalize-space(.), 1, 1) != '*'" & _
"and substring(normalize-space(preceding-sibling::item[1]), 1, 1) != '*'" & _
"]" _
)
For Each Line In DefectiveLines
LineNum = Line.SelectNodes("./preceding-sibling::item").Length + 1
WScript.Echo "Error for line " & LineNum & ": " & Line.Text
Next
Else
WScript.Echo XmlDoc.parseError.reason
End If
这让我
- 第1行出现错误:消息(MSG_1)
- 第4行的错误:SAPGUI(FB01\U 100\U步骤\U 2)。
- 第25行出现错误:结束消息(E_MSG_1)。
注意,我已经打开了
选项Explicit
,这是您应该养成的习惯。我还使用了更合理的变量名。您所说的“我们想检测这样的节点文本,但没有提到任何注释”是什么意思?这很令人困惑。是的,现在它工作得很好。。。非常感谢你的朋友。。谢谢
Option Explicit
Dim XmlDoc
Dim DefectiveLines, Line, LineNum
Set XmlDoc = CreateObject("MSXML2.DOMDocument")
XmlDoc.setProperty "SelectionLanguage", "XPath"
XmlDoc.async = False
XmlDoc.load "D:\new Automation\backup\script.xml"
If XmlDoc.parseError = 0 Then
Set DefectiveLines = XmlDoc.SelectNodes( _
"//SCRIPT//item[" & _
"string-length(normalize-space(.)) > 0" & _
"and substring(normalize-space(.), 1, 1) != '*'" & _
"and substring(normalize-space(preceding-sibling::item[1]), 1, 1) != '*'" & _
"]" _
)
For Each Line In DefectiveLines
LineNum = Line.SelectNodes("./preceding-sibling::item").Length + 1
WScript.Echo "Error for line " & LineNum & ": " & Line.Text
Next
Else
WScript.Echo XmlDoc.parseError.reason
End If