#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 много.