Powershell XML Добавление дочернего элемента - PullRequest
0 голосов
/ 28 июня 2018

Желание добавить еще один дочерний элемент в элемент system.web. До сих пор я пробовал несколько способов, однако, не сработали. Я создал этот код, который я не уверен, близок или нет.

Код пока:

#setting variables
$path = "H:\PSTesting\Logs\ExerciseXml.xml"
$xml = Get-Content $path

#Creating element
$child = $xml.CreateElement("Test")

#setting attributes
$child.SetAttribute('Testing','hey = "something"')

#adding attributes to the location
$xml.'system.web'.AppendChild($child)

#save file
$xml.Save($path)

Ниже приведен мой XML, который необходимо изменить. Ток:

<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
    -<system.web>
        <authentication mode="None"/>
        <compilation targetFramework="4.5.1" debug="false"/>
        <httpRuntime targetFramework="4.5.1"/>
    </system.web>
</configuration>

Ниже приведен желаемый результат запуска кода.

<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
    -<system.web>
        <authentication mode="None"/>
        <compilation targetFramework="4.5.1" debug="false"/>
        <httpRuntime targetFramework="4.5.1"/>
        <Testing Hey = 'something'>
    </system.web>
</configuration>

Любая помощь будет оценена. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я не верю, что ответ Робди сработает, потому что он не решает реальную проблему - команду Get-Content, которая читает ваш xml как текстовый файл. Следовательно, свойства и методы xml, используемые в сценарии, не будут работать.

Однако ответ действительно прост: наберите $xml до [xml]

#setting variables
$path = "H:\PSTesting\Logs\ExerciseXml.xml"
[xml]$xml = Get-Content $path                 #typecasting to xml here

#Creating element
$child = $xml.CreateElement("Test")

#setting attributes
$child.SetAttribute('Testing','hey = "something"')

#adding attributes to the location
$xml.'system.web'.AppendChild($child)

#save file
$xml.Save($path)

Как упоминал Робди, - вводит в заблуждение. Это не формат XML.

0 голосов
/ 28 июня 2018

Ты совсем близко, всего несколько изменений:

#setting variables
$path = "H:\PSTesting\Logs\ExerciseXml.xml"
[xml]$xml = Get-Content $path

#Creating element
$child = $xml.CreateElement("Testing")

#setting attributes
$child.SetAttribute('hey','something')

#adding attributes to the location
$xml.configuration.'system.web'.AppendChild($child)

#save file
$xml.Save($path)

Кстати, вы можете удалить - из вашего примера, поскольку они вводят в заблуждение (xml на самом деле их не содержит, и они видны только при открытии из таких программ, как IE)

Редактировать : как указано Рохин Сидхарт , в качестве рекомендации рекомендуется указывать тип (хотя PowerShell обнаружит его автоматически, если формат файла правильный) .

Edit2 : чтобы уточнить, что было не так:

$child = $xml.CreateElement("Test")

Это создаст элемент с именем Test, в то время как вы хотите Testing на основе вашего желаемого результата.

$child.SetAttribute('Testing','hey = "something"')

Это создаст атрибут Testing со значением hey = "something"

$xml.'system.web'.AppendChild($child)

Это не будет работать, так как правильный путь - $xml.configuration.'system.web' вместо $xml.'system.web'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...