meierjo
Goto Top

Powershell: in XML-File xsd:string ersetzen

Hallo

Ich habe eine xml-Datei, in der ich den xsd:string "ano" durch "unbekannt" ersetzen will
Meine bescheidenen Powershell-Kenntnisse reichen leider nicht aus.
Kann mir bitte jemand den entscheidenden Denk-Anstoss geben?

In Zeile 5 wird schon mal die richtige Zeile "herausgesucht", nur fehlt mir hier, wie ich diese Zeile ändern kann

Die XML-Datei
<?xml version="1.0"?>   
<XProject xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   
  <Data> 
    <XProjectColumn> 
      <Name>ProjectNo</Name> 
      <Value xsi:type="xsd:string">10021</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>ProjectNoPPS</Name> 
      <Value xsi:type="xsd:string"> </Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>Description</Name> 
      <Value xsi:type="xsd:string"></Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>CreatedBy</Name> 
      <Value xsi:type="xsd:string">anonym</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>CurrentUser</Name> 
      <Value xsi:type="xsd:string">ano</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>CreateDate</Name> 
      <Value xsi:type="xsd:dateTime">2022-10-28T06:47:52.9621759+02:00</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>LastChanged</Name> 
      <Value xsi:type="xsd:dateTime">2022-10-28T07:28:52.9277204+02:00</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>CurrentIndex</Name> 
      <Value xsi:type="xsd:int">1</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>MaxIndex</Name> 
      <Value xsi:type="xsd:int">1</Value>   
    </XProjectColumn> 
    <XProjectColumn> 
      <Name>Locked</Name> 
      <Value xsi:type="xsd:boolean">false</Value>   
    </XProjectColumn> 
  </Data> 
</XProject>

Mein bisheriger Powershell-Code
$file = 'c:\temp\10021.xml'  
$xml = [xml](gc $file)
[System.Xml.XmlNamespaceManager]$ns = new-Object System.Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("ns",$xml.DocumentElement.NamespaceURI)  
$xml.SelectNodes("//ns:Value",$ns) | where-object {$_.'#text' -eq 'ano'}  

$xml.Save($file)

Danke, Gruss

Content-ID: 4446797033

Url: https://administrator.de/contentid/4446797033

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

4400667902
Lösung 4400667902 29.10.2022 aktualisiert um 16:54:28 Uhr
Goto Top
$file = 'c:\temp\10021.xml'  
$xml = [xml](gc $file) 
[System.Xml.XmlNamespaceManager]$ns = new-Object System.Xml.XmlNamespaceManager $xml.NameTable 
$ns.AddNamespace("ns",$xml.DocumentElement.NamespaceURI)   
$ns.AddNamespace("xsi","http://www.w3.org/2001/XMLSchema-instance")   
$xml.SelectNodes("//ns:Value[@xsi:type = 'xsd:string' and . = 'ano']",$ns) | %{$_.innerText = 'unbekannt'}  
$xml.Save($file)
So geht es als alternative Möglichkeit auch wenn das Schema gleich bleibt
$file = 'c:\temp\10021.xml'  
$xml = [xml](gc $file) 
$xml.XProject.Data.XProjectColumn.Value | ?{$_.type -eq 'xsd:string' -and $_.innerText -eq 'ano'} | %{$_.innerText = 'unbekannt'}  
$xml.Save($file)
Meierjo
Meierjo 29.10.2022 um 16:57:40 Uhr
Goto Top
Hallo ukulele

Herzlichen Dank, macht genau, was er soll

Gruss