在powershell中转义冒号

时间:2015-07-30 12:49:07

标签: powershell escaping colon

我在powershell中有以下代码试图回读一段xml。

$path = "C:\path\8429006775491.xml"
$xml = [xml](Get-Content $path)
$xml.ern:NewReleaseMessage

问题是冒号(:),我试图用它来逃避它,但它似乎不起作用。也尝试把它放在{} 如果我在xml文件本身编辑冒号并相应地更改代码,它会回读正常但不幸的是,这不是一个选项。任何帮助真的很感激。

1 个答案:

答案 0 :(得分:1)

为了让.NET了解名称空间前缀,您需要一个名称空间管理器对象:

$path = "C:\path\8429006775491.xml"
$xml = [xml](Get-Content $path)

$XmlNSManager = New-Object System.Xml.XmlNamespaceManager -ArgumentList $xml.NameTable
$XmlNSManager.AddNamespace('ern','http://ddex.net/xml/ern/341')
$XmlNSManager.AddNamespace('xsi','http://www.w3.org/2001/XMLSchema-instance')

# Now you can use SelectNodes() with your namespace manager:

# If NewReleaseMessage is the root node
$xml.SelectNodes('/ern:NewReleaseMessage',$XmlNSManager)

# If NewReleaseMessage is a descendant of the root node
$xml.SelectNodes('//ern:NewReleaseMessage',$XmlNSManager)