Фон: Я хотел бы разработать скрипт PowerShell для управления содержимым файла * .regsvr. Это файл XML, используемый для экспорта/импорта зарегистрированных SQL-серверов с помощью SQL Server Management Studio. Вот blog pos t, который рассказывает об использовании SQL-запросов для создания файла. Я хочу сделать больше, чем просто создать файл, я хочу управлять существующими файлами экспорта.По умолчанию для пространства имен XML нужен префикс?
Проблема: Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как читать в XmlDocument, используя пространство имен по умолчанию.
Пример с пространством имен, что не могу получить, чтобы работать, как ожидалось:
$xmlstring = @'
<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
<identity/>
</model>
'@
$doc = new-object System.Xml.XmlDocument
$doc.LoadXml($xmlstring)
$nsmgr = new-object System.Xml.XmlNamespaceManager($doc.NameTable)
$nsmgr.AddNamespace([String]::Empty, "http://schemas.serviceml.org/smlif/2007/02")
$nsmgr.PushScope()
$xpath = "/model"
$doc.SelectNodes($xpath, $nsmgr).count
Выход равен 0, но 1, как ожидается.
Это работает:
$xmlstring = @'
<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
<identity />
</model>
'@
$doc = new-object System.Xml.XmlDocument
$doc.LoadXml($xmlstring)
$nsmgr = new-object System.Xml.XmlNamespaceManager($doc.NameTable)
$nsmgr.AddNamespace("x", "http://schemas.serviceml.org/smlif/2007/02")
$nsmgr.PushScope()
$xpath = "/x:model"
$doc.SelectNodes($xpath, $nsmgr).count
И дает мне выход 1. Как я могу указать пространство имен по умолчанию и избежать использования префикса в запросе XPath?
Или иначе: в XPath префикс всегда не означает пространство имен. Для доступа к элементам в пространстве имен вам нужен префикс. Даже если в исходном документе это пространство имен по умолчанию. –
@MichaelKay Спасибо за разъяснение. +1 –