您可能想查看What is the difference between SAX and DOM? 以获取有关解析 XML 的替代方法的信息。
SAX 可能是您的好方法。
PowerShell and .Net itself don't have a native SAX parser,但XmlReader class 可能对你有用。
从 MSDN Docs 上的示例看起来,它似乎没有做任何太疯狂的事情或使用 PowerShell 中乏味/困难的功能。
这是他们的 C# 示例:
// Create a validating XmlReader object. The schema
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {
// Move to the hire-date element.
reader.MoveToContent();
reader.ReadToDescendant("hire-date");
// Return the hire-date as a DateTime object.
DateTime hireDate = reader.ReadElementContentAsDateTime();
Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}
这是一个我根本懒得测试的 PowerShell 端口(抱歉):
# Create a validating XmlReader object. The schema
# provides the necessary type information.
$settings = New-Object System.Xml.XmlReaderSettings
$settings.ValidationType = [System.Xml.ValidationType]::Schema
$settings.Schemas.Add("urn:empl-hire", "hireDate.xsd")
# see their page for example XML/XSD
try {
$reader = [System.Xml.XmlReader]::Create("hireDate.xml", $settings)
# Move to the hire-date element.
$reader.MoveToContent();
$reader.ReadToDescendant("hire-date");
# Return the hire-date as a DateTime object.
$hireDate = $reader.ReadElementContentAsDateTime()
"Six Month Review Date: {0}" -f $hireDate.AddMonths(6) | Write-Verbose -Verbose
} finally {
$reader.Dispose()
}