El uso de PowerShell para editar varios archivos XML
-
22-09-2019 - |
Pregunta
¿Cómo puedo obtener una lista de varios archivos XML desde un directorio especificado y para cada archivo de añadir un elemento en el marco del segundo utilizando PowerShell nodo raíz?
Ejemplo:
Quiero añadir <LastName>SomeName</LastName>
dentro del primer elemento de <Names>
:
<People>
<Names>
<FirstName>someFirstName</FirstName>
</Names>
<Names>
<FirstName>myFirstName</FirstName>
<Address>SomeAddress</Address>
</Names>
</People>
Se convertirá en:
<People>
<Names>
<LastName>SomeName</LastName>
<FirstName>someFirstName</FirstName>
</Names>
<Names>
<FirstName>myFirstName</FirstName>
<Address>SomeAddress</Address>
</Names>
</People>
Solución
Puede hacerlo utilizando CreateElement
y el método AppendChild
Get-ChildItem c:\temp\ *.xml |
% {
$xml = [xml](Get-Content $_.fullname)
$lastName = $xml.CreateElement('LastName')
$lastName.PsBase.InnerText = 'SomeName'
$null = $xml.People.Names[0].AppendChild($lastName)
$xml.Save($_.FullName)
}
En el caso de que ejecute PowerShell V2, que no es necesario que PsBase
uso de la propiedad:
$lastName.InnerText = 'SomeName'
Hay otras maneras a ciencia cierta, pero este es uno es bastante fácil.
En el caso de que el nodo sería más profundo en XML, se puede usar Xpath como esto (tanto encontrar primer nodo Names
):
$node = (Select-Xml -Xml $x -XPath '//Names[1]').Node
$node = (Select-Xml -Xml $x -XPath '//Names[position()=1]').Node
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow