2017-08-15 21 views
0

我想通過VB腳本中的XML樹解析,但我無法提取出我想要的值。我想拉取名稱值(例如:CHNG_REQT_NBCHNG_REQT_DTL_CO),但是使用下面的代碼,我只能打印出與每個代碼相關的「列」和值,例如,下面的代碼和XML,它會打印出如下圖所示:如何解析VBScript中的這個XML樹?

 
column 
13389 
column 
/* NOTES */ 1) CR#145: New Code Table 

我想它打印爲

 
CHNG_REQT_NB 
13389 
CHNG_REQT_DTL_CO 
/* NOTES */ 1) CR#145: New Code Table 

可能有人請指出我要去哪裏錯了嗎?以下是我的代碼和XML示例。

Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
objXMLDoc.Async = False 
objXMLDoc.Load("result.xml") 

Set Root = objXMLDoc.DocumentElement 
Set rowList = Root.GetElementsByTagName("row") 

For Each row In rowList 
    handleNode(row) 
Next 

Sub handleNode(row) 
    For Each elem In row.ChildNodes 
     WScript.Echo elem.TagName 
     WScript.Echo elem.Text 
    Next 
End Sub 
<?xml version="1.0" encoding="UTF-8"?> 
<resultsets> 
<resultset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<row> 
<column name="CHNG_REQT_NB">13389</column> 
<column name="CHNG_REQT_DTL_CO">/* NOTES */ 1) CR#145: New Code Table</column> 
</row> 
</resultset> 
</resultsets> 
+2

'WScript.Echo elem.tagName' - >'WScript.Echo elem.GetAttribute(「name」)' –

+0

就是這樣!我已經嘗試過,但我一定是在錯誤的地點或其他地方嘗試過。發佈它作爲答案,我會接受它。 – johns4ta

回答

1

您需要獲取節點的name屬性的值,而不是節點名稱。

變化

For Each elem In row.ChildNodes 
    WScript.Echo elem.TagName 
    WScript.Echo elem.Text 
Next

For Each elem In row.ChildNodes 
    WScript.Echo elem.GetAttribute("name") 
    WScript.Echo elem.Text 
Next

,代碼會做你想要什麼。

1

使用XPath對於這一點,不要亂通過子節點爬來爬去。

Set xml = CreateObject("Msxml2.DOMDocument") 
xml.Async = "False" 

xml.Load("45694693.xml") 

if(xml.parseError) then 
    WScript.Echo  xml.parseError.reason & " line: " & xml.parseError.line 
end if 

for each ndColumn in xml.selectNodes("//column") 
    WScript.Echo ndColumn.getAttribute("name") + vbCrLf + ndColumn.text 
next 

WScript.Echo strReturn