【发布时间】:2021-04-08 08:51:47
【问题描述】:
我欣然承认我不懂 XML,但我正在努力学习。也就是说,我在学习这个特殊问题时遇到了死胡同。
首先,我在这个链接上看到了这个帖子,但它的解决方案没有帮助: XML Document SelectSingleNode returns null 你可以看到我在下面添加了一些建议的代码,它导致了相同的行为。
我正在尝试将打印机列表附加到一个看起来很像这样的 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<REMOTE_PRINTING_NODE>
<PRINTING_PARAMETERS_FILE>
</PRINTING_PARAMETERS_FILE>
<PRINTER_MAPPINGS>
<PRINTER_MAPPING>
<PHYSICAL>\\Server\Printer_1</PHYSICAL>
<LOGICAL>Printer_1</LOGICAL>
</PRINTER_MAPPING>
<PRINTER_MAPPING>
<PHYSICAL>\\Server\Printer_2</PHYSICAL>
<LOGICAL>Printer_2</LOGICAL>
</PRINTER_MAPPING>
</PRINTER_MAPPINGS>
</REMOTE_PRINTING_NODE>
这里是导入、附加和保存 XML 数据的代码:
Install-Module PSExcel
$xml = [xml](Get-Content "C:\printer.xml")
$printerList = (Import-XLSX "C:\Printers.xlsx")
$ns = New-Object xml.xmlnamespacemanager($xml.NameTable)
$ns.AddNameSpace("x", "http://microsoft.com/GroupPolicy/GPOOperations/MigrationTable")
forEach ($printer in $printerList) {
$mapEl = $xml.CreateElement("PRINTER_MAPPING")
$LogEl = $xml.CreateElement("LOGICAL")
$PhyEl = $xml.CreateElement("PHYSICAL")
$PhyEl.AppendChild($xml.CreateTextNode("$($printer.Physical)"))
$LogEl.appendChild($xml.CreateTextNode("$($printer.logical)"))
$mapEl.AppendChild($PhyEl)
$mapEl.AppendChild($LogEl)
$mappings = $xml.SelectSingleNode("/x:REMOTE_PRINTING_NODE/x:PRINTER_MAPPINGS", $ns)
$mappings.AppendChild($mapEl)
}
$xml.save("C:\printer.xml")
我遇到的问题是这一行:
$mappings.AppendChild($mapEl)
通过 foreach 循环的每次迭代都无法将构建的 XML 数据附加到文档中,因为 $mappings 为空。我不知道从这里去哪里。谢谢。
【问题讨论】:
-
试试 $mappings = $xml.SelectSingleNode("/REMOTE_PRINTING_NODE/PRINTER_MAPPINGS", $ns)
-
为什么不直接使用内置的 PowerShell cmdlet 来处理 XML?
-
@Aaron 成功了,谢谢!你能发布一个答案以便我标记它吗?
标签: xml powershell