我正在尝试解析以下文件:
<?xml version="1.0" encoding="UTF-8" ?>
<printDrivers>
<printDriver id="XE8550">
<inf>x28550p.inf</inf>
<driverPath>\drivers\XEROX\8550\8550_Driver</driverPath>
<printerPaths>
<printerPath>\\print-man\man-25</printerPath>
</printerPaths>
</printDriver>
<printDriver id="HP4050TN">
<inf>hpbf002i.inf</inf>
<driverPath>\drivers\HP\LaserJet\LaserJet_4050_PCL6</driverPath>
<printerPaths>
<printerPath>\\print-man\man-8</printerPath>
<printerPath>\\print-man\man-14</printerPath>
</printerPaths>
</printDriver>
</printDrivers>使用以下powershell脚本:
$nodelist = $xd.selectnodes("/printDrivers/printDriver") # XPath is case sensitive
foreach ($printerDriverNode in $nodelist) {
$XMLid = $printerDriverNode.getAttribute("id")
$XMLinf = $printerDriverNode.selectSingleNode("inf").get_innerXml()
$XMLdriverPath = $printerDriverNode.selectSingleNode("driverPath").get_innerXml()
$printerPathNodeList = $printerDriverNode.selectNodes("printerPaths/printerPath")
foreach ($printerPathNode in $printerPathNodeList) {
$XMLprinterPath = $printerPathNode.selectSingleNode("printerPath").get_innerXml()
}
}除了“嵌套”节点之外,一切都运行得很好。当我运行脚本时,它只得到第一个。也就是说,它不会得到\print-man\man-14,只会得到\print-man\man-8。
如何才能让它返回所有节点?
谢谢,
本
发布于 2010-07-21 20:45:06
foreach ($printerPathNode in $printerPathNodeList) {
$XMLprinterPath = $printerPathNode.selectSingleNode("printerPath").get_innerXml()
}您已经遍历了这里的printerPaths/printerPath节点-不需要在该<printerPath>节点上执行另一个.selectsinglenode -只需从该$printerPathNode读取.InnerXml或.InnerText -它们应该会给出您正在查找的值
发布于 2010-07-21 20:44:47
这是意料之中的,您将多次分配相同的变量($XMLprinterPath),因此第二个值将覆盖第一个值。您是否打算将其用作数组或列表?
发布于 2010-07-21 21:25:13
如果您有可用的PowerShell V2.0,您可以使用Select-Xml,它可以为您动态生成对象:
Select-Xml -Path "test.xml" -Xpath "/printDrivers/printDriver" | ForEach-Object {
$id = $_.Node.id
$inf = $_.Node.inf
$driverPath = $_.Node.driverPath
$_.Node | Select-Xml -Xpath "printerPaths/printerPath" | ForEach-Object {
$printerPath = $_.Node.InnerText
}
}https://stackoverflow.com/questions/3299227
复制相似问题