我正在尝试创建一个遍历XML文件的递归函数,并分析它的节点。
我创建了一个名为XML的函数,如下所示:
function XML {
param ([XML] $XMLDoc)
if($XMLDoc.HasChildNodes){
return XML XML.FirstChild
} else {
...
}
我使用以下代码获取XML文档:
$XMLDocPath = "W:\SomePath\file.xml"
$XMLDoc = New-Object System.Xml.XmlDocument
$XMLFile = Resolve-Path($XMLDocPath)
$XMLDoc.Load($XMLFile)
[XML] $XMLDoc = Get-content -Path $XMLDocPath
问题是,我想将My XML Document提供给XML
函数,但是通过递归调用,我必须向XML
函数提供XML.FirstChild
和{ {1}}对象,它们不是同一类型的对象。
我的问题是,我可以在函数的XML.NextSibling
中添加什么,以便能够将节点传递给此函数,而不是XML对象。 param ([...] $XMLDoc)
的类型是什么? XMLDoc.FirstChild
给了我一些东西,但它不能放在参数的类型中。
拥有:
XMLDoc.FirstChild.GetType()
而不是:
if($XMLDoc.HasChildNodes){
XML $XMLDoc.FirstChild
}
答案 0 :(得分:1)
如果您希望/需要传递不同类型的参数,请不要将参数赋予固定类型:
function XML {
param($XmlObject)
if($XmlObject.HasChildNodes){
return XML $XmlObject.FirstChild
} else {
...
}
}
另外,将复杂的XML导入减少到:
$XMLDocPath = "W:\SomePath\file.xml"
[xml]$XMLDoc = Get-Content -Path $XMLDocPath