Modificar os atributos pai XML que iteram através dos atributos filhos usando o powershell

Portanto, tenho o seguinte xml (items.xml) e desejo localizar os atributos do item do nó filho iterados pelos atributos e, se encontrar atributos semelhantes no nível do nó pai, substitua o mesmo pelos atributos do nó filho e remova os atributos filhos diferente do nome.

  <items>    
    <model type="model1" name="default" price="12.12" date="some_value">
      <PriceData>
        <item name="watch" price="24.28" date="2013-12-01" />
      </PriceData>
    </model>
    <model type="model2" name="default" price="12.12" date="some_value">
      <PriceData>
        <item name="toy" price="22.34" date="2013-12-02"/>
      </PriceData>
    </model>
    <model type="model3" name="default" price="12.12" date="some_value">
      <PriceData>
        <item name="bread" price="24.12" date="2013-12-03"/>
      </PriceData>
    </model>
  </items>    

O xml final deve ficar assim

  <items>    
    <model type="model1" name="watch" price="24.28" date="2013-12-0">
      <PriceData>
        <item name="watch" />
      </PriceData>
    </model>
    <model type="model2" name="toy" price="22.34" date="2013-12-02">
      <PriceData>
        <item name="toy" "/>
      </PriceData>
    </model>
    <model type="model3" name="bread" price="24.12" date="2013-12-03">
      <PriceData>
        <item name="bread" />
      </PriceData>
    </model>
  </items>    

Consigo obter os atributos no nível filho, mas não consigo retornar ao nó pai a partir do nível filho.

A seguir está o código que tentei acessar os nós principais

[xml]$model = get-content items.xml
$model.SelectNodes("//item/@*") 

Output:

#text                                                                                                                                                  
-----                                                                                                                                                  
watch                                                                                                                                                  
24.28                                                                                                                                                  
2013-12-01                                                                                                                                             
toy                                                                                                                                                    
22.34                                                                                                                                                  
2013-12-02                                                                                                                                             
bread                                                                                                                                                  
24.12                                                                                                                                                  
2013-12-03  


$model.SelectNodes("//item/@*") | foreach {write-host $_.parentnode}

No Output:

$model.SelectNodes("//item/@*") | foreach {write-host $_.parentnode.parentnode}

No Output:

Posso obter os nomes dos atributos do nó filho da seguinte maneira:

$model.SelectNodes("//item/@*") | foreach {write-host $_.name} 

Output:
PS C:\BIOS_Work_Dir\Kit_Manifest_test> $model.SelectNodes("//item/@*") | foreach {write-host $_.name}
name
price
date
name
price
date
name
price
date

Agora, para cada atributo, só preciso voltar ao nó pai, verificar se existe um atributo semelhante e substituí-lo pelo atributo do nó filho

Então, eu estou procurando algo como

$model.SelectNodes("//item/@*") | foreach {($_.name).parentnode.parentnode.($_.name)} | <some code to replace parentnode attribute with child attribute>

Em seguida, para remover os atributos filho, algo como

$model.SelectNodes("//item/@*") | where {$_.name -notlike "name"} | foreach {$_.Removeattribute()}

e se ambos puderem ser feitos em um único comando, isso seria incrível

Talvez eu também esteja tentando fazer muitas coisas em uma única linha

Todos os ponteiros são muito apreciados! Não tenho certeza do que estou fazendo de errado aqui, pois o PowerShell não gera um erro para o uso do nó pai, mas simplesmente não imprime nada. Qualquer ajuda é incrível de todos os seus programadores experientes !!

questionAnswers(2)

yourAnswerToTheQuestion