Powershell通过函数调用传递XMLDocument

时间:2016-01-19 19:45:30

标签: powershell

我尝试通过函数调用传递System.XML.XMLDocument对象,但在函数调用后该对象更改为System.Object[]

更具体地说,我有这样的功能:

function GenerateXml()
{

    [System.XML.XMLDocument]$xmlDoc=New-Object System.XML.XMLDocument
    $declaration = $xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes")
    $xmlDoc.AppendChild($declaration)

    [System.XML.XMLElement]$root = $xmlDoc.CreateElement("dummy")
    $root.SetAttribute("Name", "dummy value")
    $xmlDoc.AppendChild($root)
    $xmlDoc
}

[System.XML.XMLDocument]$xmlDoc = GenerateXml

这将输出如下错误:

Cannot convert value "System.Object[]" to type "System.Xml.XmlDocument".

那么通过函数调用传递XMLDocument的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

结果表明Powershell会将方法的所有输出都返回给数组。要获得实际的返回值,您可以获取输出数组的最后一个成员,也可以不输出除实际需要之外的任何其他内容。

答案 1 :(得分:0)

您的后续响应“将方法输出到数组”是正确的,但可以避免。在您的示例中,您使用.AppendChild()方法,该方法本身可以产生输出,因此可以作为数组中的对象产生Return值。可以避免这种情况,因为

$xmlDoc.AppendChild($root) | Out-Null