解析从Microsoft Excel导出的XML电子表格文件

解析从Microsoft Excel导出的XML电子表格文件,xml,excel,vbscript,Xml,Excel,Vbscript,我正在尝试使用VBScript解析从Microsoft Excel导出的XML电子表格文件。我首先尝试计算元素的数量。但是,脚本始终返回0。我做错了什么 这是我的VBScript文件: Set-oXML=CreateObject(“Microsoft.XMLDOM”) oXML.aSync=false oXML.SetProperty“SelectionLanguage”、“XPath” oXML.SetProperty“ServerHTTPRequest”,True oXML.validate

我正在尝试使用VBScript解析从Microsoft Excel导出的XML电子表格文件。我首先尝试计算
元素的数量。但是,脚本始终返回0。我做错了什么

这是我的VBScript文件:

Set-oXML=CreateObject(“Microsoft.XMLDOM”)
oXML.aSync=false
oXML.SetProperty“SelectionLanguage”、“XPath”
oXML.SetProperty“ServerHTTPRequest”,True
oXML.validateOnParse=False
oXML.resolveExternals=False
加载“\u test\u.xml”
msgboxml.SelectNodes(“//行”).length'返回0
WScript.Quit
'通过所有节点循环工作正常
设置节点=oXML。选择节点(“//*”)
对于i=0到nodes.length-1
Msgbox节点(i).nodeName
下一个
下面是XML文件:


14
第一排
第二排

由于存在多个名称空间,因此必须为XPATH定义这些名称空间。即使对于默认名称空间,也必须这样做。如果不是,则无法使用XPATH从名称空间获取具体元素。这就是为什么
/*
将起作用,但
//行
将不起作用,因为XPATH不知道
属于哪个命名空间

将使用设置名称空间。另见和

你的例子是:

Set-oXML=CreateObject(“Microsoft.XMLDOM”)
oXML.aSync=false
oXML.SetProperty“SelectionLanguage”、“XPath”
oXML.SetProperty“ServerHTTPRequest”,True
oXML.validateOnParse=False
oXML.resolveExternals=False
oXML.setProperty“SelectionNamespaces”、“xmlns:d=”“urn:schemas microsoft com:office:spreadsheet”“”和_
“xmlns:o=”“urn:schemas microsoft com:office:office”“”&_
“xmlns:x=”“urn:schemas microsoft com:office:excel”“”和_
“xmlns:ss=”“urn:schemas microsoft com:office:spreadsheet”“”和_
“xmlns:html=”http://www.w3.org/TR/REC-html40"""
加载“\u test\u.xml”
msgboxml.SelectNodes(//d:Row”).length'返回2
'循环表中的所有行
Set nodes=oXML.selectNodes(“//d:Table//*”)
对于i=0到nodes.length-1
Msgbox节点(i).nodeName
下一个

在该示例中,我在默认名称空间前面加了
d

,因为有多个名称空间,所以必须为XPATH定义这些名称空间。即使对于默认名称空间,也必须这样做。如果不是,则无法使用XPATH从名称空间获取具体元素。这就是为什么
/*
将起作用,但
//行
将不起作用,因为XPATH不知道
属于哪个命名空间

将使用设置名称空间。另见和

你的例子是:

Set-oXML=CreateObject(“Microsoft.XMLDOM”)
oXML.aSync=false
oXML.SetProperty“SelectionLanguage”、“XPath”
oXML.SetProperty“ServerHTTPRequest”,True
oXML.validateOnParse=False
oXML.resolveExternals=False
oXML.setProperty“SelectionNamespaces”、“xmlns:d=”“urn:schemas microsoft com:office:spreadsheet”“”和_
“xmlns:o=”“urn:schemas microsoft com:office:office”“”&_
“xmlns:x=”“urn:schemas microsoft com:office:excel”“”和_
“xmlns:ss=”“urn:schemas microsoft com:office:spreadsheet”“”和_
“xmlns:html=”http://www.w3.org/TR/REC-html40"""
加载“\u test\u.xml”
msgboxml.SelectNodes(//d:Row”).length'返回2
'循环表中的所有行
Set nodes=oXML.selectNodes(“//d:Table//*”)
对于i=0到nodes.length-1
Msgbox节点(i).nodeName
下一个

在那个例子中,我用
d

@Ansgar Wiechers作为默认名称空间的前缀:我从来都不明白有些人反对IT技术文本中链接URI的透明性。但就这样吧IMO文本中的文字URL阻碍了阅读流畅性,所以我更喜欢将它们做成“常规”链接。我不认为这真的会损害链接的透明度,因为与URL缩短器不同,当鼠标悬停在链接上时,你仍然可以看到完整的URL。现在一切都好了。我学到了一两件事。非常感谢您的教训:)@Ansgar Wiechers:我从来都不明白有些人对IT技术文本中链接URI的透明度有什么不满。但就这样吧IMO文本中的文字URL阻碍了阅读流畅性,所以我更喜欢将它们做成“常规”链接。我不认为这真的会损害链接的透明度,因为与URL缩短器不同,当鼠标悬停在链接上时,你仍然可以看到完整的URL。现在一切都好了。我学到了一两件事。非常感谢您的课程:)