2013-11-26 24 views
0

我已經簡化了XML配置,通過升壓::系列化產生:問題使用XPath <!DOCTYPE> ::序列生成的xml在VBS

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<!DOCTYPE boost_serialization> 
<boost_serialization signature="serialization::archive" version="5"> 
    <path>D:\test</path> 
</boost_serialization> 

我想編輯使用VBS path節點文本,但同時<!DOCTYPE>標記呈現在xml文件中我無法獲得XPath請求的節點。

set xmlConf = CreateObject("Microsoft.XMLDOM") 
xmlConf.Async = "False" 
xmlConf.Load("conf.xml") 
'xmlConf.setProperty "SelectionNamespaces", "" 
set pathNode = xmlConf.selectSingleNode("/boost_serialization/path") 
if not pathNode is nothing then 
    WScript.Echo pathNode.Text 
else 
    WScript.Echo "NOTHING" 
end if 

是否有任何隱藏的命名空間,我應該在評論行中提及?或者還有其他一些麻煩?

回答

1

VBScript似乎無法識別DOCTYPE。檢查XML對象的ParseError屬性。這是我從你的XML示例中得到的結果:

>>>Set xml = CreateObject("Microsoft.XMLDOM") 
>>>xml.Async = False 
>>>xml.Load "C:\Temp\test.xml" 
>>>WScript.Echo Hex(xml.ParseError.ErrorCode) 
C00CE00D 
>>>WScript.Echo xml.ParseError.Reason 
The element 'boost_serialization' is used but not declared in the DTD/Schema.

關於更一般的說明:Microsoft.XMLDOM已過時。改爲使用Msxml2.DOMDocument.6.0


一些調查研究後:您可能能夠解決此問題的描述here

Set xml = CreateObject("Msxml2.DOMDocument.6.0") 
xml.Async = False 
xml.ValidateOnParse = False 
xml.SetProperty "ProhibitDTD", False 
xml.SetProperty "ResolveExternals", False 

xml.Load "C:\path\to\conf.xml" 

Set node = xml.SelectSingleNode("//path") 
If node Is Nothing Then 
    WScript.Echo "NOTHING" 
Else 
    WScript.Echo node.Text 
End If