¿Cómo devolver un archivo XML desde una función con un nodo?
Sep 21 2020
Tengo un XML simple
<bds>
<bd>
<id>10</id>
<user>john</user>
<servers>
<name>pc24</name>
</servers>
</bd>
<bd>
<id>12</id>
<user>peter</user>
<servers>
<name>pc25</name>
</servers>
</bd>
Tengo una función y me gustaría que devuelva un archivo XML con todos los elementos que cuelgan de un nodo.
$collection = "bds" $attribute = "name"
$obj = "pc25" function test () { if ($xml.SelectNodes("//$attribute").name -eq "name") { return $xml.SelectNodes("//$attribute").parentnode | Where $attribute -eq $obj } else { return $false
}
}
Me gustaría que la salida de la función sea:
<id>12</id>
<user>peter</user>
<servers>
<name>pc25</name>
</servers>
¿Cómo puedo generar un archivo XML con el retorno de la función?
Respuestas
1 mclayton Sep 21 2020 at 14:02
Puede usar un XPath un poco más inteligente para seleccionar sus nodos y luego la InnerXmlpropiedad para obtener la cadena de salida que busca:
PS> $xml = [xml] @" <bds> <bd> <id>10</id> <user>john</user> <servers> <name>pc24</name> </servers> </bd> <bd> <id>12</id> <user>peter</user> <servers> <name>pc25</name> </servers> </bd> </bds> "@ PS> $xml.SelectNodes("bds/bd[servers/name = 'pc25']").InnerXml
<id>12</id><user>peter</user><servers><name>pc25</name></servers>
Nota: bds/bd[servers/name = 'pc25']significa "buscar todos los bds/bdnodos que tienen un servers/namenodo hijo con un valor pc25".
A continuación, puede volver a ajustar esto en su función utilizando los valores de las variables en la cadena XPath según corresponda ...