Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用powershell更新xml文档,但在更新根节点时出现问题_Powershell_Xml Parsing - Fatal编程技术网

尝试使用powershell更新xml文档,但在更新根节点时出现问题

尝试使用powershell更新xml文档,但在更新根节点时出现问题,powershell,xml-parsing,Powershell,Xml Parsing,文档示例: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]> <Identity created="1525465321820" name="Onboarding - GUI - External"> <Attributes> <Map> <entry key="displ

文档示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity  created="1525465321820" name="Onboarding - GUI - External">
  <Attributes>
    <Map>
      <entry key="displayName" value="Onboarding - GUI " />
      <entry key="firstname" value="Z Orphaned ID" />
  </Attributes>
</Identity>
而不是存钱

$myFile = 'C:\somefile.xml'
$xmldata.Save($myFile)
但当我尝试对name做同样的事情时:

[string]  $xmldata.Identity.Name = "TEST"
我有一个错误:

在此对象上找不到属性“Name”。验证该属性是否存在并可以设置


谢谢

XML区分大小写,因为

<Identity  created="1525465321820" name="Onboarding - GUI - External">
反对

$xmldata.Identity.Name
并使用

$xmldata.Identity.name = "TEST"
测试

按照上面演示的方法使用$var 输出:

Onboarding - GUI - External
TEST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity created="1525465321820" name="TEST">
  <Attributes>
    <Map>
      <entry key="displayName" value="Onboarding - GUI " />
      <entry key="firstname" value="Z Orphaned ID" />
    </Map>
  </Attributes>
</Identity>
输入:

$var.Identity.name = "TEST"
$var.Identity.name
输出:

Onboarding - GUI - External
TEST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity created="1525465321820" name="TEST">
  <Attributes>
    <Map>
      <entry key="displayName" value="Onboarding - GUI " />
      <entry key="firstname" value="Z Orphaned ID" />
    </Map>
  </Attributes>
</Identity>
然后将标题添加回变量 最后,将变量保存回XML文件 关于

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
Powershell似乎不喜欢,因此如果您跳过它们,它就可以正常工作

在Powershell 5.1中测试

稍微更改了您的XML文件,因为PS在我使用您的确切XML时给了我错误,因为没有关闭

您对name属性的尝试与对displayname和firstname属性的尝试不同。 使用后两种方法,您将从XML中读取字符串变量中的值。使用name属性,您将尝试将其设置为新值

为此,首先需要选择保存要更新的属性的元素。一旦有了它,就可以使用XmlElement对象的SetAttribute方法

[xml]$xmldata = @"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity  created="1525465321820" name="Onboarding - GUI - External">
  <Attributes>
    <Map>
      <entry key="displayName" value="Onboarding - GUI " />
      <entry key="firstname" value="Z Orphaned ID" />
    </Map>
  </Attributes>
</Identity>
"@

# select the node(s) to update, and update the name attribute
$xmldata.Identity | Where-Object { $_.name -like 'Onboarding*' } | ForEach-Object {
    $_.SetAttribute("name", "TEST")
}

# Now save the updated XM to file:
$xmldata.Save('C:\somefile.xml')
输出:

Onboarding - GUI - External
TEST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity created="1525465321820" name="TEST">
  <Attributes>
    <Map>
      <entry key="displayName" value="Onboarding - GUI " />
      <entry key="firstname" value="Z Orphaned ID" />
    </Map>
  </Attributes>
</Identity>

错误与它看起来的完全一样,xml文件上没有name属性,除非$myfile文件中有不同的内容,请向我们提供有关thatHi Neko的信息,名称就在那里name=Onboard-GUI-External。从顶部算起的第三行。谢谢你的回复。哦,我的坏。。。它可能需要另一个命令才能访问,因为它位于属性内部。。。尝试$xmldata |让成员查看是否有用于属性的命令是否正确?没有关闭Thx Neko,有大量命令,抱歉,powershell还不太清楚。如何使用此..评论不用于扩展讨论;这段对话已经结束了。嗨,西奥,这太好了。我还有一个问题,我不知道name的name值是多少。如果我没有在$\ux.name下指定任何内容,就像我得到的方法调用失败一样,但它仍然会更改值。那应该没问题。我还有一个更大的问题。我要更改的文件最初是UNIX LF UTF-8,但当Powershell读写时,它们将所有mestup都放入带有空格的Windows CR LF UTF-8-BOM中,这些文件不好。你知道如何保持相同的格式吗?非常感谢您的帮助。@Evo我看到您已经发布了一个关于Unix格式与Windows的新问题。我回答了你贴在这里的问题。您可能不知道这一点,但通常会通过单击旁边的复选标记图标来接受解决问题的答案。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity created="1525465321820" name="TEST">
  <Attributes>
    <Map>
      <entry key="displayName" value="Onboarding - GUI " />
      <entry key="firstname" value="Z Orphaned ID" />
    </Map>
  </Attributes>
</Identity>