Вы можете использовать .NET XmlReader для чтения в файл XML и прекращения дальнейшей его обработки, как только у вас появится нужная информация.
Преимущество: это очень быстро ииспользует рядом без памяти. Недостаток: вы должны использовать, например, флаги, чтобы поддерживать контекст того, что вы читаете, потому что читатель работает как перемещение курсора по файлу. Он только сохраняет свою позицию и на что он сейчас смотрит;Вы должны вести всю необходимую бухгалтерию.
Следующее возвращает значение атрибута SomeHeaderAttribute
первого элемента <HeaderStuff>
, с которым он сталкивается, и прекращает обработку после этого. Приспосабливайтесь к вашему конкретному XML-макету и нуждам.
using namespace System.IO
using namespace System.Xml
function Get-HeaderStuff {
param([string]$xmlFilePath)
try {
$stream = New-Object FileStream -ArgumentList ($xmlFilePath, [FileMode]::Open)
$settings = New-Object XmlReaderSettings
$settings.Async = $false
$reader = [XmlReader]::Create($stream, $settings)
while ($reader.Read()) {
if (
$reader.NodeType -eq [XmlNodeType]::Element -and
$reader.Name -eq "HeaderStuff"
) {
return $reader.GetAttribute("SomeHeaderAttribute")
}
}
} finally {
# clean up
if ($reader) { $reader.Dispose() }
if ($stream) { $stream.Dispose() }
}
}
Вы бы назвали его путем к вашему XML-файлу:
$result = Get-HeaderStuff ".\oneofmyxmlfiles.xml"
Write-Host $result