2016-10-10 103 views
0

我想知道如何在相同的XML中將<element1>value</element1>的值變爲<element16>value</element16>將元素的值複製到另一個元素中

<element16>沒有固定的位置,但如果存在它需要填寫值爲<element1>

我必須用PowerShell來做到這一點。誰能幫我一把嗎?

這是我有:

$latest = Get-ChildItem -Path $dir | 
      Sort-Object LastAccessTime -Descending | 
      Select-Object -First 1 
$latest.Fullname 

$attachment = $latest.Fullname 

$xml = New-Object Xml 
$xml.Load($latest.Fullname) 

$xml.SelectSingleNode('/order/sf_st_mail').InnerText = 
$xml.SelectSingleNode('/order/sf_re_mail').InnerText 

$xml.Save($latest.Fullname) 

這導致

例外設置 「#text」:

「屬性 '#text' 不能在該物體上找到」

Snipplet XML:

<order> 
    <sf_re_mail>[email protected]</sf_re_mail> 

    <element x, y ,z> </element x, y ,z> 
    <sf_st_mail></sf_st_mail> 
</order> 

應該成爲:

<order> 
    <sf_re_mail>[email protected]</sf_re_mail> 

    <element x, y ,z> </element x, y ,z> 
    <sf_st_mail>[email protected]</sf_st_mail> 
</order> 

回答

2

加載XML:

$xml = New-Object Xml 
$xml.Load($latest) 

的情況下,使用XPath選擇的元件可以是在節點樹的任何地方:

$xml.SelectSingleNode('//sf_st_mail').InnerText = 
    $xml.SelectSingleNode('//sf_re_mail').InnerText 

或者直接當訪問它們你知道樹狀結構:

$xml.order.sf_st_mail = $xml.order.sf_re_mail # for simple text values 

要更換複雜節點與嵌套的子節點:

$xml.someNode.parentNode.ReplaceChild($xml.anotherNode.Clone(), $xml.someNode) 

然後保存:

$xml.Save($latest) 
+0

這導致「異常設定‘#text’:」屬性‘#text’不能是在這個物體上發現 。驗證該屬性是否存在並可以設置。「 在D:\ test.ps1:16 char:1 + $ xml.SelectSingleNode('// sf_st_mail /.').'# text'= + ~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NotSpecified:(:) [],SetValueInvocationExceptio n + FullyQualifiedErrorId:ExceptionWhenSetting –

+0

tnx很多,但不幸它返回在此對象上找不到該屬性'InnerText'。驗證是否存在適當的 ty並可以進行設置。我會在明天檢查一下睡眠。 –

+0

你最近的解釋做了.. tnx很多。 –

相關問題