Я хочу удалить / удалить атрибут в узле в xml, если он соответствует моему ключу = значению, используя powershell - PullRequest
1 голос
/ 12 марта 2020

Я пытался использовать $node.RemoveAttribute($name).

. Рассмотрим следующее:

<configuration>
  <configSections>
    <section name="User" />
    <section name="Admin" />
  </configSections>
</configuration>

Я хотел бы удалить name="User", а не name="Admin"

Если я используйте следующее, оба атрибута удаляются.

 [xml]$Xml=Get-Content Web.config
    $path=".//configuration/configSections/section"
    $element="name"
    $node = $xml.SelectNodes($path)
    $node.RemoveAttribute($element)

Я новичок в Powershell.

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Если вы хотите удалить Атрибут «имя» и оставить узел на месте, но пустым, вы можете следовать ответу Васифа, здесь в виде одной строки:

$xml.configuration.configsections.section | Where-Object { $_.name -eq "user" } | ForEach-Object { $_.RemoveAttribute("name") }

Результат:

<configuration>
  <configSections>
    <section />
    <section name="Admin" />
  </configSections>
</configuration>

Если вы хотите удалить узел, имеющий атрибут «имя» со значением «Пользователь», вы можете сделать это вместо этого:

$xml.configuration.configsections.section | Where-Object { $_.name -eq "user" } | ForEach-Object { $null = $_.ParentNode.RemoveChild($_) }

Результат:

<configuration>
  <configSections>
    <section name="Admin" />
  </configSections>
</configuration>

Согласно вашему комментарию, если имеется более одного узла с атрибутом name = "User" 'и вы хотите удалить только первое вхождение, выполните :

$firstNode = $xml.configuration.configsections.section | Where-Object { $_.name -eq "user" } | Select-Object -First 1 
$null = $firstNode.ParentNode.RemoveChild($firstNode)

Это то, что вы имеете в виду?

0 голосов
/ 12 марта 2020

Попробуйте это:

$xml = [xml](get-content "filepath")
$xml.configuration.configsections.section | foreach {
  if ($_.name -eq "user") {
    $_.removeattribute("name")
  }
}

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