Извлечь ключ из XML - PullRequest
       1

Извлечь ключ из XML

2 голосов
/ 29 октября 2019

Я вызываю API, используя «Invoke-WebRequest» и получая приведенный ниже XML-код возврата.

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.sft.com/">a879-956c3452f55e3c</string>

Как извлечь часть «a879-956c3452f55e3c» из этого XML-кода повторной настройки.

Я попробовал этот код

$tmpstring1 = $temp.Content -split 'com/">'
$finalString1 = $tmpstring1[1] -split "</"
$Key = $finalString1[0]

1 Ответ

3 голосов
/ 29 октября 2019

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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...