Xpath не оператор в Select-Xml через Powershell - PullRequest
2 голосов
/ 12 февраля 2011

Я работаю с файлами csproj и пытаюсь написать командлет, который извлекает все файлы, на которые ссылается файл проекта.Это будет включать все элементы Compile, EmbeddedResource, Resource, Content и None (что более важно, их значения @Include), но я специально хочу исключить элементы Reference, так как они ссылаются на dll, которые меня не интересуют.

У меня нет тонны опыта, но я думаю, что выражение xpath, которое я хотел бы, выглядело бы примерно так

$projectFile | Select-Xml -namespace @{msb="http://schemas.microsoft.com/developer/msbuild/2003"} -xpath "//msb:ItemGroup/*[not(self::node() = msb:Reference) and @Include]"

Однако, как только я попытаюсь представитьself :: node () мое выражение не возвращает узлов.Я не уверен на 100%, что self :: node () - правильный способ сделать это.Любая идея, что я хотел бы изменить, чтобы он возвращал, концептуально, "все значения атрибута Включить для узлов , которые не являются ссылочными элементами , которые являются дочерними элементами элемента ItemGroup?"

1 Ответ

5 голосов
/ 12 февраля 2011

Я думаю, что вам нужно:

//msb:ItemGroup/*[not(self::msb:Reference)]/@Include

Значение: все атрибуты Include любого потомка msb:ItemGroup, кроме msb:Reference, во всем документе

...