Powershell从XML中删除节点并在保存时删除空行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Powershell从XML中删除节点并在保存时删除空行相关的知识,希望对你有一定的参考价值。

通过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文件有多个空行。

enter image description here

我假设每个删除的笔记都会产生一个额外的空行。如何避免这种情况?

答案

这个问题的原因是PreserveWhitespaceXmlDocument属性是真的。 Invoke-RestMethod的输出似乎将PreserveWhitespace属性设置为默认值。

但是将$doc.PreserveWhitespace = $false设置为Invoke-RestMethod的输出并不能解决问题,因为换行代码仍然存在。

我找不到在PreserveWhitespace中取消设置Invoke-RestMethod的选项,所以我认为自己将响应转换为XmlDocument是最简单的解决方案。

$doc = New-Object System.Xml.XmlDocument
$doc.LoadXml((Invoke-WebRequest -Uri $url).Content)
另一答案

我通常使用xml数据库来处理小型多属性数据库,并且出现此错误我使用了linq语句,并且必须使用from,where和select来选择我想要删除的元素。

var elementsToSelect = from ele in xmlDoc.Elements("List").Elements("Entry")
                       where ele != null && ele.Attribute("Name").Value.Equals(DropDownList1.SelectedValue)
                        select ele;

我将不得不看到查询,看看你是在选择一个板块范围的节点,还是只是像我上面那样解决了我的错误。我是一个级别,它选择了所有节点并删除它们。

以上是关于Powershell从XML中删除节点并在保存时删除空行的主要内容,如果未能解决你的问题,请参考以下文章

在 XML 中查找重复值并在 XSL 中删除节点

powershell Powershell脚本,用于从已编译的twine游戏中删除保存加密代码。

检查Windows服务是否存在并在PowerShell中删除

VBA 循环遍历 XML 节点并在每个节点中获取值

如何根据条件从 XML 中删除节点?

如何从xml中删除列表父节点?