Пример XML-файла:
<input>
<filePattern>
<midfix>.bof-fix</midfix>
<format>raw</format>
</filePattern>
</input>
Если я попытаюсь извлечь текст из элемента «формат», следующий скрипт работает нормально:
Get-ChildItem -Path "C:\ps_scripts\configs\*" -Recurse |
ForEach-Object {
$xml_file = $_
$curr_dir = $xml_file
$content = [xml](Get-Content $curr_dir)
$nodes = $content.SelectNodes("//input")
foreach ($node in $nodes) {
$format = $node.SelectNodes('filePattern/format').InnerText
$format
}
}
Результат:
raw
Но если я изменю приведенный выше скрипт, заменив 2 строки в цикле foreach следующим:
$midfix = $content.SelectNodes('filePattern/midfix').InnerText
$midfix
тогда выхода нет вообще. Ожидаемый результат:
.bof-fix
Видимо, это из-за ведущей точки (.) в тексте?
Я не знаю, будет ли это работать с PS 5.0, но попробуйте вот так и посмотрите, работает ли это:
$nodes = $xml.SelectSingleNode("//midfix")
foreach ($node in $nodes) {
$format = $node.InnerText
$format
}
Редактировать: Чтобы отразить комментарий ниже: изменять
$nodes = $xml.SelectSingleNode("//midfix")
к
$nodes = $xml.SelectSingleNode("//input//midfix")
да работает, спасибо. Небольшая проблема заключается в том, что эта модификация будет проверять все элементы "midfix", а мне нужно проверять только те элементы "midfix", которые являются дочерними элементами элемента "input".