在powershell中转义冒号

9vw9lbht  于 2023-02-04  发布在  Shell
关注(0)|答案(1)|浏览(202)

我在Powershell中有下面的代码,试图读回一段XML。

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

问题出在冒号上。我试着用'来转义它,但似乎不起作用。我还试着把它放在{}
如果我编辑XML文件本身中的冒号并相应地更改代码,它可以正常读回,但不幸的是,这不是一个选项。

2g32fytz

2g32fytz1#

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

$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)

相关问题