String разбора XML-текста лучше избегать, потому что он хрупкий;нам всегда предпочтительнее выделенный анализатор XML;К счастью, PowerShell обеспечивает легкий доступ к типу .NET System.Xml.XmlDocument
([xml]
):
$xmlText = @'
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.sft.com/">a879-956c3452f55e3c</string>
'@
([xml] $xmlText).string.InnerText # .'#text' works too
Примечание. PowerShell удобно адаптирует XML DOM для точечной нотации, так что элементы и атрибуты доступны, как если быони были обычными свойствами объекта - см. этот ответ для получения дополнительной информации.
Обычно, элемент XML, который имеет только текстовое содержимое (текстовый дочерний узел, такой как a879-956c3452f55e3c
элемента * 1013)* значение здесь) напрямую возвращает текстовое содержимое при доступе с точечной нотацией (.string
).
Однако, поскольку элемент <string>
имеет объявление пространства имен (xmlns=...
), .string
фактически возвращает экземпляр [System.Xml.XmlElement]
, чей текстовый дочерний узел должен быть явно доступен, либо через его свойство .InnerText
, либо через адаптированное свойство, названное для (общего) имени узла текстового дочернего элемента.'#text'
.