Powershell 从 XML 中删除节点并在保存时删除空行
Powershell remove nodes from XML and remove empty lines when saving
通过 Rest-API 调用,我在 Powershell 中收到一个 XML 文件。
#calling the REST service and get XML result
$xml = try {
Invoke-RestMethod -Uri $url -ErrorAction Stop
} catch {
LogWrite "An exception was caught: $($formatstring -f $fields)";
exit;
}
然后我使用 removeChild()
删除节点。
#manipulate XML
$xml.SelectNodes("//XPathQuery").ParentNode.RemoveChild(...)
最后我保存了被操纵的XML。
#save XML
$xml.Save("$targetDirectory$filename");
生成的 XML 文件有多个空行。
我假设每个删除的注释都会导致一个额外的空行。如何避免这种情况?
我通常使用 xml 数据库来处理小型多属性数据库并出现此错误我使用了 linq 语句并且不得不使用 from、where 和 select 到 select我要删除的元素。
var elementsToSelect = from ele in xmlDoc.Elements("List").Elements("Entry")
where ele != null && ele.Attribute("Name").Value.Equals(DropDownList1.SelectedValue)
select ele;
我必须查看查询,看看您是 select 正在处理一系列节点还是像我上面所做的那样解决了我的错误。我差了一级,它 select 编辑了所有节点并删除了它们。
这个问题的原因是 XmlDocument
的 PreserveWhitespace
属性 为真。
Invoke-RestMethod
的输出似乎设置了 PreserveWhitespace
属性 默认为真。
但是将 $doc.PreserveWhitespace = $false
设置为 Invoke-RestMethod
的输出并不能解决问题,因为换行代码仍然存在。
我在 Invoke-RestMethod
中找不到取消设置 PreserveWhitespace
的选项,所以我认为自己将响应转换为 XmlDocument
是最简单的解决方案。
$doc = New-Object System.Xml.XmlDocument
$doc.LoadXml((Invoke-WebRequest -Uri $url).Content)
通过 Rest-API 调用,我在 Powershell 中收到一个 XML 文件。
#calling the REST service and get XML result
$xml = try {
Invoke-RestMethod -Uri $url -ErrorAction Stop
} catch {
LogWrite "An exception was caught: $($formatstring -f $fields)";
exit;
}
然后我使用 removeChild()
删除节点。
#manipulate XML
$xml.SelectNodes("//XPathQuery").ParentNode.RemoveChild(...)
最后我保存了被操纵的XML。
#save XML
$xml.Save("$targetDirectory$filename");
生成的 XML 文件有多个空行。
我假设每个删除的注释都会导致一个额外的空行。如何避免这种情况?
我通常使用 xml 数据库来处理小型多属性数据库并出现此错误我使用了 linq 语句并且不得不使用 from、where 和 select 到 select我要删除的元素。
var elementsToSelect = from ele in xmlDoc.Elements("List").Elements("Entry")
where ele != null && ele.Attribute("Name").Value.Equals(DropDownList1.SelectedValue)
select ele;
我必须查看查询,看看您是 select 正在处理一系列节点还是像我上面所做的那样解决了我的错误。我差了一级,它 select 编辑了所有节点并删除了它们。
这个问题的原因是 XmlDocument
的 PreserveWhitespace
属性 为真。
Invoke-RestMethod
的输出似乎设置了 PreserveWhitespace
属性 默认为真。
但是将 $doc.PreserveWhitespace = $false
设置为 Invoke-RestMethod
的输出并不能解决问题,因为换行代码仍然存在。
我在 Invoke-RestMethod
中找不到取消设置 PreserveWhitespace
的选项,所以我认为自己将响应转换为 XmlDocument
是最简单的解决方案。
$doc = New-Object System.Xml.XmlDocument
$doc.LoadXml((Invoke-WebRequest -Uri $url).Content)