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

时间:2019-03-28 16:07:11

标签: xml powershell removechild

通过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

我假设每个删除的音符都会导致另外一行空行。如何避免这种情况?

2 个答案:

答案 0 :(得分:1)

此问题的原因是PreserveWhitespace的{​​{1}}属性为true。
XmlDocument的输出似乎将Invoke-RestMethod属性设置为ture默认情况下。

但是将PreserveWhitespace设置为$doc.PreserveWhitespace = $false的输出并不能解决问题,因为保留了换行符。

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

XmlDocument

答案 1 :(得分:0)

我通常使用xml数据库来处理小型多属性数据库,并且遇到此错误,我使用了linq语句,并且不得不从from,where和位置使用,并选择仅选择要删除的元素。

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

我将不得不查看查询以查看您是在选择板级范围的节点,还是仅选择一个单板范围的节点来解决我的错误。我是一级用户,它选择了所有节点并将其删除。