2017-05-11 3 views
2

J'ai un script PowerShell dans lequel il essaie de remplacer les valeurs d'un nœud de fichier XML par une valeur différente.Remplacer le texte dans le nœud XML contenant l'esperluette

Exemple, dans le noeud SectorDesc remplacez '&' par 'et'.

<?xml version="1.0" encoding="UTF-8"?> 
<OrganisationUnits> 
    <OrganisationUnitsRow num="8"> 
    <OrganisationId>ACME24/7HOME</OrganisationId> 
    <OrganisationName>ACME LTD</OrganisationName> 
    <ContactDetails> 
     <ContactDetailsRow num="1"> 
     <ContactCode>OFFICE</ContactCode> 
     </ContactDetailsRow> 
    </ContactDetails> 
    <Sector>P</Sector> 
    <SectorDesc>Private Private &amp; Voluntary</SectorDesc> 
    </OrganisationUnitsRow> 
</OrganisationUnits> 

donc cette ligne

<SectorDesc>Private Private &amp; Voluntary</SectorDesc> 

conseillerai maintenant se présenter comme

<SectorDesc>Private Private and Voluntary</SectorDesc> 

Ceci est mon code jusqu'à présent.

$file = "C:\Dump\test\test.xml" 
$xml = [xml](Get-Content $file) 
$xml.selectNodes('//SectorDesc/value[contains(.,"text")]')| 
       ForEach-Object{$_.'#text' = ($_.'#text' -replace "&amp;","and") } 

$xml.Save("$File") 

Répondre

3

Si vous lisez le code XML comme celui-ci &amp; va se lire comme juste & donc vous devez remplacer pour &. , Vous pouvez également accéder au nœud comme ceci:

$xml.OrganisationUnits.OrganisationUnitsRow.SectorDesc = $xml.OrganisationUnits.OrganisationUnitsRow.SectorDesc -replace '&', 'and' 
+0

La raison pour laquelle je veux remplacer & avec un autre personnage est parce que l'application qui importera le XML ne peut pas gérer. Je sais que c'est un xml valide mais l'application ne le prendra pas, d'où la nécessité d'un travail de transformation. J'ai essayé le code comme suggéré mais quand & est utilisé, il n'effectue pas le remplacement. – zoomzoomvince

+0

Utilisez simplement le code fourni avec & –