Копирование значения элемента в другой элемент

#xml #powershell

#xml #powershell

Вопрос:

Я пытаюсь выяснить, как я могу получить значение <element1>value</element1> into <element16>value</element16> в том же XML.

<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’ не может быть найдено для этого объекта»

Фрагмент XML:

 <order>
  <sf_re_mail>abc@abc.com</sf_re_mail>

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

должно стать:

 <order>
  <sf_re_mail>abc@abc.com</sf_re_mail>

  <element x, y ,z> </element x, y ,z>
  <sf_st_mail>abc@abc.com</sf_st_mail>
</order>
  

Ответ №1:

Загрузите 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)
  

Комментарии:

1. это приводит к «Настройке исключения «#text»: «Свойство ‘#text’ не может быть найдено для этого объекта. Убедитесь, что свойство существует и может быть установлено.» В D:test.ps1:16 символ: 1 $xml.SelectSingleNode(‘//sf_st_mail/.’).’#текст’ = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Информация о категории : не указано: (:) [], SetValueInvocationExceptio n FullyQualifiedErrorId : исключение при установке

2. tnx много, но, к сожалению, он возвращает свойство ‘innerText’, которое не может быть найдено для этого объекта. Убедитесь, что правильный тип существует и может быть установлен.. Я проверю завтра после сна.

3. ваше последнее объяснение сделало это .. tnx много.