gpt4 book ai didi

xml - 在Powershell脚本中使用CreateNode和SetAttribute方法更新XML文件将隐式添加前缀参数d3p1和d4p1

转载 作者:行者123 更新时间:2023-12-03 01:25:22 28 4
gpt4 key购买 nike

我有一个XML文件,需要使用Powershell脚本进行更新。对于此更新,我需要添加一些节点并为这些节点设置一些属性。
在这里,我将为您提供一个有关如何执行此操作的示例:

[xml]$SuiteFile = Get-Content -Path $SuiteFilePath
$SuiteNamespace = "http://www.google.com"
$ExecutablePackageNode = $SuiteFile.CreateNode("element", "ExecutablePackage", $SuiteNamespace)
$ExecutablePackageNode.SetAttribute("Name", $SuiteNamespace, "SuppressExternals")
$SuiteFile.Save("$SuiteFilePath")
我期望看到XML行以这种方式更新:
<ExecutablePackage Name="SuppressExternals" xmlns="http://www.google.com">
但是,它会像这样更新:
<ExecutablePackage d3p1:Name="SuppressExternals" xmlns:d3p1="http://www.google.com">
似乎我隐式地添加了d3p1前缀参数,即使我没有在方法中指定前缀参数也是如此。有人可以让我知道为什么会这样吗?

最佳答案

.Net将"d3p1:"前缀添加到属性Name的原因是,为了满足您的要求将属性添加到"http://www.google.com"命名空间,必须这样做。如果您不想这样做,则应在不指定 namespace 的情况下创建属性。
以下是更详细的说明。如XML standard中所述:

The namespace name for an unprefixed attribute name always has no value.


(这与默认 namespace 中的无前缀XML 元素形成对比。)
当你做
$ExecutablePackageNode.SetAttribute("Name", $SuiteNamespace, "SuppressExternals")
您正在调用 XmlElement.SetAttribute(SetAttribute (string localName, string namespaceURI, string value) 方法:

Sets the value of the attribute with the specified local name and namespace URI.


因此,您特别要求在 $SuiteNamespace命名空间中创建属性。但是,由于无前缀属性永远不在 namespace 中,因此.Net必须自动生成一些前缀以用于指定 namespace 。这就是您所看到的。
如果您不希望在 $SuiteNamespace中创建属性,只需调用 SetAttribute (string name, string value) :
$ExecutablePackageNode.SetAttribute("Name", "SuppressExternals")
并且您应该获得一个未前缀的 Name属性。

关于xml - 在Powershell脚本中使用CreateNode和SetAttribute方法更新XML文件将隐式添加前缀参数d3p1和d4p1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63742217/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com