我正在尝试使用以下代码加载XML:
$xsl = new-object -ComObject Microsoft.XMLDOM.1.0
$xsl.load('http://172.16.177.200/1.xml')
$xsl.transformNode($xsl)
但是,$xsl.load
仅在XML是本地文件时有效。使用上面的代码,transformNode
引发错误“完成此操作所需的数据不可用”
试图添加start-sleep 5
,没有帮助。
有什么想法吗?
答案 0 :(得分:3)
Microsoft.XMLDOM
已过时多年。在COM领域中,您应该使用Msxml2.DOMDocument
(更具体地说是Msxml2.DOMDocument.6.0
)。 Related。
对于COM XML对象,您还应该禁用异步处理,以便在下一条指令之前完成XML文档的加载/解析。
$xsl = New-Object -ComObject 'Msxml.DOMDocument.6.0'
$xsl.Async = $false
$xsl.Load('http://172.16.177.200/1.xml')
话虽如此,由于PowerShell是基于.Net构建的,因此建议使用.Net而不是COM:
$xsl = New-Object Xml
$xsl.Load('http://172.16.177.200/1.xml')
在.Net中,默认情况下,土地加载/解析XML文件是同步的。不过,您将需要替换TransformNode()
。 See here。