如何在PowerShell中获取单个XML元素

3

我有一个名为"1.xml"的xml文件:

<configuration >
  <application>
    <name>My Application</name>
  </application>
  <log level="info" />
</configuration>

我想要修改name节点中的文本,将其从"My Application"更改为"Name from Powershell"。我可以这样做:

$xml = [xml](Get-Content "1.xml");
$nameNode = $xml.configuration.application.ChildNodes.Item(0);
$nameNode.InnerText = "Name from Powershell";

但我不喜欢按索引获取节点的想法。我想通过名称获取它。但是这些变量对我不起作用:

$nameNode = $xml.configuration.application.name;

$nameNode = $xml.SelectSingleNode("//configuration/application/name");

有没有一种简单的方法在PowerShell中按名称获取元素?

3
$xml.configuration.application.name 绝对有效,将其设置为新值会更改元素内容。如果“对你不起作用”,你需要更具体地说明是哪部分没有起作用。 - Jeroen Mostert
1个回答

4

以下内容对我有效。正如@Jeroen所说,您需要更具体地提供可运行的脚本,以显示哪些内容不起作用。

$xml = [xml]@"
<configuration >
  <application>
    <name>My Application</name>
  </application>
  <log level="info" />
</configuration>
"@

$xml.configuration.application.name # Outputs "My Application"
$xml.configuration.application.name = "Test"
$xml.configuration.application.name # Outputs "Test"

1
Lieven和@Jeroen,你们是对的,$xml.configuration.application.name是可以用的。我的错误在于:我以为它会返回一个带有属性的对象,并尝试像这样做:$xml.configuration.application.name.InnerText = "Test" - elshev
在那里过来了<g>。 - Lieven Keersmaekers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接