我在powershell中有以下代码试图回读一段xml。
$path = "C:\path\8429006775491.xml"
$xml = [xml](Get-Content $path)
$xml.ern:NewReleaseMessage
问题是冒号(:),我试图用它来逃避它,但它似乎不起作用。也尝试把它放在{} 如果我在xml文件本身编辑冒号并相应地更改代码,它会回读正常但不幸的是,这不是一个选项。任何帮助真的很感激。
答案 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)