¿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 ...