【发布时间】:2016-09-06 07:14:19
【问题描述】:
我有一个 PowerShell 脚本,用于从 XML 文件中删除某些标签:
$Output = "C:\Users\Desktop\Resulttask.xml"
# Load the existing document
$Doc = [xml](Get-Content -Path C:\Users\Desktop\Test.xml)
# Specify tag names to delete and then find them
$DeleteNames = "Total" | ForEach-Object {
$Doc.ChildNodes.SelectNodes($_)
} | ForEach-Object {
$Doc.ChildNodes.RemoveChild($_)
}
$Doc.Save($Output)
我的问题是它适用于标准 XML 文件,例如:
<html>
<body>b</body>
<Price>300</Price>
<Total>5000</Total>
</html>
但问题是 XML 文件必须从包含多个前缀之类的标签中删除。
<ns:html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="2" release="1">
<ns:body>b</ns:body>
<ns:Price>300</ns:Price>
<ns:Total>5000</ns:Total>
</ns:html>
然后它不会删除标签,但会收到如下错误
使用“1”参数调用“SelectNodes”的异常:“命名空间管理器或
需要 XSltContext。此查询具有前缀、变量或用户定义的函数。”
在行:2 字符:5
+ $Doc.ChildNodes.SelectNodes($_)
+ ------------------
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationExeption
+ FullyQualllifiedErrorId : DotNetMethodException
我的问题是如何确保 PowerShell 命令忽略前缀 ns:。
【问题讨论】:
-
您不能忽略它,因为它是 XML 数据的一部分。此外,错误消息已经告诉您需要做什么:使用namespace manager。
标签: xml powershell