Kei*_*ith 11 powershell namespaces
我有一个包含两个命名空间的XML文档('default'命名空间和xlink):
如何在PowerShell代码中指定"两个"命名空间?PowerShell似乎需要默认命名空间的前缀.我该怎么做呢?
现在我有以下代码(不确定要为默认命名空间包含什么):
[System.Xml.XmlNamespaceManager] $nsmgr = $xml.NameTable;
$nsmgr.AddNamespace('?','http://embassy/schemas/dudezilla/');
[System.Xml.XmlNamespaceManager] $nsmgr = $xml.NameTable;
$nsmgr.AddNamespace('xlink','http://www.w3.org/1999/xlink');
[System.Xml.XmlNodeList] $nodelist;
[System.Xml.XmlElement] $root = $xml.DocumentElement;
$nodelist = $root.SelectNodes("//image/@xlink:href", $nsmgr);
Foreach ($xmlnode in $nodelist)
{
$xmlnode.Value;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Kei*_*ill 18
PowerShell v2使这更简单:
$ns = @{
dns="http://embassy/schemas/dudezilla/"
xlink="http://www.w3.org/1999/xlink"
}
$xml | Select-Xml '//dns:image/@xlink:href' -Namespace $ns
Run Code Online (Sandbox Code Playgroud)
如果你想以另一种方式尝试,请尝试:
$nsmgr = New-Object System.Xml.XmlNamespaceManager $xml.NameTable
$nsmgr.AddNamespace('dns','http://embassy/schemas/dudezilla/')
$nsmgr.AddNamespace('xlink','http://www.w3.org/1999/xlink')
$root = $xml.DocumentElement
$nodelist = $root.SelectNodes("//dns:image/@xlink:href", $nsmgr)
foreach ($xmlnode in $nodelist)
{
$xmlnode.Value
}
Run Code Online (Sandbox Code Playgroud)
弄清楚了。必须使用 $null 作为默认命名空间的前缀($null 相当于 C# 中的 String.Empty)。
工作代码:
[System.Xml.XmlNamespaceManager] $nsmgr = $xml.NameTable;
$nsmgr.AddNamespace($null,'http://embassy/schemas/dudezilla/');
$nsmgr.AddNamespace('xlink','http://www.w3.org/1999/xlink');
[System.Xml.XmlNodeList] $nodelist;
[System.Xml.XmlElement] $root = $xml.DocumentElement;
$nodelist = $root.SelectNodes("//image/@xlink:href", $nsmgr);
Foreach ($xmlnode in $nodelist)
{
$xmlnode.Value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12926 次 |
| 最近记录: |