要为函数

时间:2016-02-10 09:40:38

标签: xml powershell

我正在尝试创建一个遍历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
}

1 个答案:

答案 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