Проблема синтаксического анализа Powershell XML без InnerText? - PullRequest
0 голосов
/ 23 января 2012

Это должно быть довольно легко выполнить, но у меня возникают проблемы при написании сценария powershell для редактирования файла XML, созданного функцией экспорта программного обеспечения HP для совместной работы.Я полагаю, что проблема связана с созданием элементов, единственное содержимое которых является вложенными элементами.

Я борюсь с AppendChild в неправильном месте, и InnerTexts является пустым под элементом vlan.Может ли кто-нибудь помочь мне с PowerShell xml, необходимым для добавления этих четырех строк xml в team.xml ниже?

<vlan>
    <property id='VlanId' value='3'/>
    <property id='VlanName' value='MISC'/>
</vlan>

Вот сокращенное содержимое team.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<teamingconfig>
<version UtilityVersion='9.90.0.17' ScriptVersion='3.1'/>
<!-- <team> element 1 -->
<team relnics='1 2'>
<property id='TeamName' value='HP Network Team #1'/>
<property id='OpMode' value='FailOnFault'/>
<!-- <vlan> element 1 -->
<vlan>
       <property id='VlanId' value='1'/>
       <property id='VlanName' value='MGMT'/>
</vlan>
  <!-- <vlan> element 2 -->
<vlan>
       <property id='VlanId' value='2'/>
       <property id='VlanName' value='APPS'/>
</vlan>
</team>
</teamingconfig>

Извините за множественные правки - Получил то, что хотел.Синтаксис немного странный -

$vlan2=$xml.SelectSingleNode("//property[@value='407'] [@id='VlanId']")
$vlan2.value="100"

Новая проблема, как получится, если я добавлю строку, как в верхней части моего скрипта:

write-host "Num Args:" $args.length

, а затем передам ps1 переменную, этоКажется, что-то напутало с SelectSingleNode, говоря, что system.object [] не содержит метод с именем selectsinglenode?Я не касаюсь переменной $ xml с аргументами.Я просто пытаюсь, например, чтобы vlanid был аргументом командной строки.Я попытался создать функцию и использовать param, но это привело к той же проблеме с кодом.

Понятно - $ xmldata = xml Спасибо всем!

1 Ответ

2 голосов
/ 23 января 2012

Вы можете клонировать один и добавить его обратно:

$vlan = $xml.SelectSingleNode("//vlan").clone()
$vlan.property[0].value = "3"
$vlan.property[1].value = "MISC"
[void]$xml.SelectSingleNode("//team").AppendChild($vlan)
$xml.save("test.xml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...