Скажем, у вас есть следующий XML-файл:
<Root>
<Child />
<Child />
</Root>
Запустите это:
PS > $myDoc = [xml](Get-Content $pathToMyDoc)
PS > @($myDoc.SelectNodes("/Root/Child")).Count
2
PS > @($myDoc.Root.Child).Count
2
Теперь отредактируйте файл XML, чтобы у него не было дочерних узлов, а только корневой узел, и снова запустите эти операторы:
PS > $myDoc = [xml](Get-Content $pathToMyDoc)
PS > @($myDoc.SelectNodes("/Root/Child")).Count
0
PS > @($myDoc.Root.Child).Count
1
Это 1 раздражает, когда вы хотите перебрать коллекцию узлов, используя foreach тогда и только тогда, когда они есть. Вот как я узнал, что вы не можете использовать нотацию свойства (точка) свойства обработчика XML как простой ярлык. Я верю, что происходит то, что SelectNodes возвращает коллекцию 0. Когда @ 'ed, он преобразуется из XPathNodeList в Object [] (проверьте GetType ()), но длина сохраняется. Динамически генерируемое свойство $ myDoc.Root.Child (которое по существу не существует) возвращает $ null. Когда $ null равен @ ', он становится массивом длины 1.