我试图在PowerShell中选择一个存在多次的节点。我声明了名称空间并尝试使用XPath选择但没有成功。我只回来了。
我不确定我做错了什么,但我可以用
选择所有设置typedef int INT
但我希望使用属性$selectedNode = $xml.SelectSingleNode("//ns:settings[@pass='oobeSystem']", $NSMGR)
来访问组件。
我尝试了不同的方法,但结果始终为NULL。
代码段:
@name="Microsoft-Windows-Shell-Setup"
XML片段:
$NSMGR = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
#$NSMGR.AddNamespace("ns", $xml.DocumentElement.NamespaceURI) default
$NSMGR.AddNamespace("ns", "urn:schemas-microsoft-com:unattend")
$NSMGR.AddNamespace("xsi", "http://www.w3.org/2001/xmlSchema-instance")
#first try
$selectedNode = $xml.SelectSingleNode("//ns:settings[@pass='oobeSystem']/component[@name='Microsoft-Windows-International-Core']", $NSMGR)
$selectedNode = $xml.SelectSingleNode("//ns:settings[@pass='oobeSystem']/xsi:component[@name='Microsoft-Windows-International-Core']", $NSMGR)
$selectedNode
#second try
$selectedNode = $xml.SelectSingleNode("//ns:settings[@pass='oobeSystem']", $NSMGR)
$selectedNode = $selectedNode.SelectSingleNode("//ns:component[@name='Microsoft-Windows-Shell-Setup']", $NSMGR) #Edit to MS Shell instead of internal core for my example
$selectedNode
答案 0 :(得分:0)
选择相对于特定父节点的所需子节点,如下所示:
$selectedNode = $xml.SelectSingleNode("//ns:settings[@pass='oobeSystem']/ns:component[@name='Microsoft-Windows-Shell-Setup']", $NSMGR)
或者像这样:
$parentNode = $xml.SelectSingleNode("//ns:settings[@pass='oobeSystem']", $NSMGR)
$selectedNode = $parentNode.SelectSingleNode("./ns:component[@name='Microsoft-Windows-Shell-Setup']", $NSMGR)
请注意,您需要为子节点的父和使用ns:
命名空间。